2011-11-10 177 views
3

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

我有一个问题,用在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”调用,并始终返回“The present password is invalid”,因为它不使用良好的身份验证提供程序来验证凭据。

但是,如果直接使用入口点,它正在工作。问题是,我希望同时使用原则和LDAP登录,如果主义失败了,它回落到LDAP:

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

用这种方式,它采用了很好的验证提供者和使用者提供。

任何人都有关于我失踪的想法吗?

回答

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只是一个名字。

相关问题