chain_provider和身份验证提供程序

时间:2011-11-10 12:13:48

标签: ldap forms-authentication symfony

将chain_provider与Doctrine和自定义用户提供程序一起使用时,是否还要使用提供程序的身份验证提供程序?

我遇到了在chain_provider中使用自定义用户提供程序的问题,如下所述:

providers:
    chain_provider:
        providers: [doctrine, egzakt_backend_ldap]
    doctrine:
        entity: { class: Egzakt\Backend\UserBundle\Entity\User }
    egzakt_backend_ldap:
        id: egzakt_backend_ldap.security.user.provider

firewalls:
   secured_area:
        pattern: /admin/
        form_login:
            provider: chain_provider
            check_path: /admin/login_check
            login_path: /admin/login

问题是egzakt_backend_ldap用户提供程序被正确调用,但不是由良好的身份验证提供程序调用。而不是由我在工厂中声明为服务的“LdapAuthenticationProvider”调用,它由“Symfony \ Component \ Security \ Core \ Authentication \ ProviderDaoAuthenticationProvide r”调用,并始终返回“提供的密码无效”,因为它没有使用良好的身份验证提供程序来验证凭据。

但是,如果直接使用入口点,它正在工作。问题是我想使用BOTH Doctrine和Ldap登录,如果Doctrine失败,它会回到Ldap:

firewalls:
   secured_area:
        pattern: /admin/
        egzakt_backend_ldap:
            check_path: /admin/login_check
            login_path: /admin/login

通过这种方式,它使用了良好的身份验证提供程序和用户提供程序。

任何人都知道我缺少什么?

1 个答案:

答案 0 :(得分:1)

您应该将配置的providers部分更改为:

providers:
    chain_provider:
        chain:
            providers: [doctrine, egzakt_backend_ldap]
doctrine:
    entity: { class: Egzakt\Backend\UserBundle\Entity\User }
egzakt_backend_ldap:
    id: egzakt_backend_ldap.security.user.provider

您错过了chain密钥,chain_provider只是一个名称。