2013-05-21 28 views
4

我試圖建立一個登錄系統使用學說實體提供者,但我總是得到這樣的錯誤:實體提供者:無編碼器已經配置了帳戶

No encoder has been configured for account "Prefix\MainBundle\Entity\Admin" 

這裏是我的設置:

security.yml

security: 
    encoders: 
     Prefix\MainBundle\Entity\Admin: 
      algorithm:  sha1 
      encode_as_base64: false 
      iterations:  1 

    role_hierarchy: 
     ROLE_ADMIN:  ROLE_USER 
     ROLE_SUPER_ADMIN: [ ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH ] 

    providers: 
     administrators: 
      entity: { class: PrefixMainBundle:Admin, property: username } 

    firewalls: 
     administrators: 
      pattern: ^/admin/ 
      anonymous: ~ 
      provider: administrators 
      form_login: 
       login_path: /admin/login 
       check_path: /admin/login_check 

    access_control: 
     - { path: ^/admin/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/admin, roles: ROLE_ADMIN } 

我有實體創建和實現的UserInterface,但我不能讓它工作,它會很大,如果有人可以在此提供一些線索。

+0

什麼時候做什麼動作你會得到這個錯誤? – cheesemacfly

+0

始終登錄操作 – Khriz

+0

我發現問題所在。編碼器的名稱與提供程序中實體的名稱不匹配,但作爲示例名稱更改錯誤不存在。對不起 – Khriz

回答

2

移動提供商是登錄表單下:

 form_login: 
      login_path: /admin/login 
      check_path: /admin/login_check 
      provider:  administrators 

嘗試使用表單進行登錄時,我假設你的錯誤。

雖然沒有直接關係,但應該用命名路線替換登錄路徑。

+0

你的意思是直接在form_login下?在登錄和檢查路徑下是否有可能無法正常工作?我現在不能嘗試,但我會告訴你是否解決了問題。謝謝!! – Khriz

+0

我的意思是它只需要去form_login下的某個地方。現在你已經在管理員下面了。所以默認的提供商正在使用,這意味着默認的編碼器正在使用,因此問題。你的路徑正在工作,否則它永遠不會到達需要編碼器的地步。 – Cerad

+0

我已經把提供者行放在form_login下,但是錯誤仍然出現。我需要在編碼器定義中使用與提供者名稱和防火牆名稱相同的名稱嗎? – Khriz

相關問題