将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
通过这种方式,它使用了良好的身份验证提供程序和用户提供程序。
任何人都知道我缺少什么?
答案 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
只是一个名称。