0

我想在 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:您必须至少添加一个身份验证提供程序。

我想这是因为依赖项是在父捆绑配置中创建的。

在不重新定义整个安全包的情况下,我必须做些什么才能让它工作?谢谢你。

4

2 回答 2

0

我想最好创建自己的处理程序。

  1. 您需要创建服务
  2. 将其注册到服务容器中
  3. 只需在您的security.yml
form_login:
    success_handler: success_login_handler
    failure_handler: failure_login_handler
logout:
    success_handler: success_logout_handler
于 2012-06-05T10:17:09.930 回答
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;
}
于 2012-06-06T14:38:51.927 回答