如果您使用网守类请求之前验证打你,你可以创建防火墙“预认证”监听器(即验证防火墙之前发生)通过延长AbstractPreAuthenticatedListener和实施getPreAuthenticatedData()
:
class GatekeeperListener extends AbstractPreAuthenticatedListener
{
protected function getPreAuthenticatedData(Request $request)
{
return array(
Gatekeeper::getCurrentUsername(), // username
'', // credentials
);
}
}
您需要创建一个安全工厂,以便为系统引入一个新的身份验证侦听器。这个过程是这样的食谱文章中描述:
How to create a custom Authentication Provider: The Factory
你security.yml
应该是这个样子:
security:
factories:
- "%kernel.root_dir%/../src/Acme/DemoBundle/Resources/config/security_factories.yml"
firewalls:
main:
pattern: .
gatekeeper: true
克里斯,感谢您的回复。我终于解决了这个问题,还有一个问题。凭证是返回数组的一部分吗?是逗号分隔的一组角色还是一组角色?感谢您的有益回应。我不认为PreAuthenicatedListener在Symfony2文档中的任何地方都被提及(除了API)。 –
该数组中的第二项将是用户的密码,但您可以只返回一个空字符串。 –
好克里斯,我想我有更多的工作,但现在我不断收到“在SecurityContext中找不到令牌”异常。令牌插入安全上下文的位置在哪里?我是否需要这样做,还是应该由我的用户提供商在理论上发生这种情况? –