カスタム認証を作成しました。しかし、理由は不明ですが、アクティブな認証リスナーが 2 つあります。したがって、認証プロバイダー マネージャーは Twice と呼ばれます。
Firstyが呼び出され、正しいトークンを返すAuthListenermu が実行されます。AuthenticationProviderManager次にUsernamePasswordFormAuthenticationListenerが呼び出され、AuthenticationProviderManager再び実行されます。そして、「不正な資格情報」を返します。
どうすれば「無効」にできUsernamePasswordFormAuthenticationListenerますか? 私のカスタムリスナーだけが呼び出されますか?
安全:
providers:
    api:
       id: api_user_provider  
firewalls:
    secured_area:
        pattern:    ^/
        user: true
        form_login:
            login_path: /login
            check_path: /check_login                
        logout: ~
サービス:
    api_user_provider:
        class:  Ad\FrontendBundle\Security\User\UserProvider
        arguments: ["@service_container"]
    user.security.authentication.provider:
       class:  Ad\FrontendBundle\Security\Authentication\Provider\AuthProvider
       arguments: ['', %kernel.cache_dir%/security/nonces]
    user.security.authentication.listener:
       class:  Ad\FrontendBundle\Security\Firewall\AuthListener
       arguments: ["@security.context", "@security.authentication.manager"]
工場
class ApiFactory implements SecurityFactoryInterface
{
    public function create(ContainerBuilder $container, $id, $config, $userProvider, $defaultEntryPoint)
    {
        $providerId = 'security.authentication.provider.user.'.$id;
        $container
            ->setDefinition($providerId, new DefinitionDecorator('user.security.authentication.provider'))
            ->replaceArgument(0, new Reference($userProvider))
        ;
        $listenerId = 'security.authentication.listener.user.'.$id;
        $listener = $container->setDefinition($listenerId, new DefinitionDecorator('user.security.authentication.listener'))
        ;
        return array($providerId, $listenerId, $defaultEntryPoint);
    }    
    public function getPosition()
    {
        return 'pre_auth';
    }
    public function getKey()
    {
        return 'user';
    }
    public function addConfiguration(NodeDefinition $node)
    {}
}
class AdFrontendBundle extends Bundle
{
    public function build(ContainerBuilder $container)
    {
        $extension = $container->getExtension('security');
        $extension->addSecurityListenerFactory(new ApiFactory());
    }
}