3

楽しみのために、Symfony 2 でカスタム認証プロバイダーを作成しようとしています。このドキュメントhttp://symfony.com/doc/current/cookbook/security/custom_authentication_provider.htmlに従います。

ここで私がすること:

security.yml

providers:
facebook_provider:
        id: facebook.security.provider 
firewalls:
admin_area:
        pattern:    ^/
        facebook:
            check_path: /login_check
            default_target_path: /
            provider: facebook_provider

名前空間 Kmelkez\AuthBundle でバンドルを作成します

名前空間 Kmelkez\AuthBundle\Security で、カスタム ファイル FacebookFactory、FacebookListener、FacebookProvider、FacebookToken を作成します。

services.yml ファイルにロードします

services.yml

 services:
     facebook.security.provider:
     class:  Kmelkez\AuthBundle\Security\FacebookProvider

 abstract_listener:
     abstract: true
     class: Symfony\Component\Security\Http\Firewall\AbstractAuthenticationListener

 facebook.security.listener:
     class:  Kmelkez\AuthBundle\Security\FacebookListener
     parent: abstract_listener 

最後に、私のファクトリ カスタム クラスでは、今のところシンプルに保ち、リスナーとプロバイダーを次のように呼び出します。

工場クラス

  class FacebookFactory extends AbstractFactory
  {
   protected function createAuthProvider(ContainerBuilder $container, $id, $config,  $userProviderId)
    {
      $providerID = 'facebook.security.provider' . $id;      
      return $providerID;
    }

   protected function getListenerId()
   {
    return 'facebook.security.listener';
   }

   public function getPosition()
   {
    return 'pre_auth';
   }

   public function getKey()
   {
    return 'facebook';
   }
  }

/login_check ルートに行くと、例外があります:

OutOfBoundsException: The index "4" is not in the range [0, -1].

そして便利なスタックトレース:

Symfony\Component\DependencyInjection\Definition.php の 255 行目の Definition->replaceArgument('4', 'admin_area') Symfony\Component\DependencyInjection\Compiler\ResolveDefinitionTemplatesPass.php 行 50 の listener.admin_area', object(DefinitionDecorator))

何か案は ?

どうも

4

1 に答える 1

4

最後に、私は問題を見つけます:

私のリスナーは抽象クラスを拡張します: AbstractAuthenticationListener

そのため、services.yml を次のように編集します。

facebook.security.listener:
class:  Kmelkez\AuthBundle\Security\FacebookListener
parent: security.authentication.listener.abstract #this key is defined in security_listeners.xml
abstract: true
于 2013-06-17T02:58:05.417 に答える