我想在Symfony \ Component \ Security \ Core \ Authentication \ AuthenticationProviderManager的函数authenticate()中添加一些代码。
我尝试创建安全捆绑包的子捆绑包。 我在这个包中重新定义了security.authentication.manager的服务,就像那个
<!-- Authentication related services -->
<service id="security.authentication.manager" class="%security.authentication.manager.class%" public="false">
<argument type="collection" />
</service>
但是当我重新启动页面时,框架会抛出异常:InvalidArgumentException:您必须至少添加一个身份验证提供程序。
我想这是因为在父包配置中创建了dependecies。
如果不重新定义整个安全捆绑包,我必须做些什么才能让它工作? 谢谢。
答案 0 :(得分:0)
我想更好的是创建自己的处理程序。
security.yml
:form_login:
success_handler: success_login_handler
failure_handler: failure_login_handler
logout:
success_handler: success_logout_handler
答案 1 :(得分:0)
好的,我发现最好的方法是创建自己的工厂,扩展symfony2的formFactory
然后我必须创建我自己的AuthentificationProvider,扩展DaoAuthenticationProvider并将其声明为抽象服务。
然后通过createAuthProvider()方法在工厂内创建服务,并替换我们需要的参数。
protected function createAuthProvider(ContainerBuilder $container, $id, $config, $userProviderId)
{
$provider = 'acme.authentication.provider.dao.'.$id;
$container
->setDefinition($provider, new DefinitionDecorator('acme.authentication.provider.dao'))
->replaceArgument(0, new Reference($userProviderId))//replace args on the service constructor
->replaceArgument(2, $id)
->addArgument(new Reference('acme.api'))//add some args to the service constructor
;
return $provider;
}