楽しみのために、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))
何か案は ?
どうも