2013-05-21 31 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

相关问题