2011-11-10 50 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只是一個名字。

相關問題