【问题标题】:Entity Provider: No encoder has been configured for account实体提供者:没有为账户配置编码器
【发布时间】:2013-05-21 17:13:20
【问题描述】:

我正在尝试使用 Doctrine Entity Provider 设置登录系统,但我总是收到此错误:

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,但我无法使其工作,如果有人能对此有所了解,那就太好了。

【问题讨论】:

  • 在执行什么操作时出现此错误?
  • 始终登录操作
  • 我找到了问题所在。编码器的名称与提供程序中实体的名称不匹配,但作为示例的名称更改,错误不存在。对不起
  • 别抱歉,我们都会犯错 :)

标签: security symfony doctrine-orm


【解决方案1】:

将提供者移动到表单登录下:

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

我假设您在尝试使用表单登录时出现错误。

虽然没有直接关系,但您应该将登录路径替换为命名路由。

【讨论】:

  • 你的意思是直接在form_login下?是否有可能在登录和检查路径下无法正常工作?我现在不能尝试,但我会告诉你这是否能解决问题。谢谢!!
  • 我的意思是它只需要放在form_login下的某个地方。现在你在管理员下拥有它。因此,正在使用默认提供程序,这意味着正在使用默认编码器,因此存在问题。您的路径正在工作,否则它永远不会达到需要编码器的地步。
  • 我已将提供程序行放在 form_login 下,但错误仍然出现。我是否需要在编码器定义中输入与提供程序和防火墙名称相同的名称?
猜你喜欢
  • 1970-01-01
  • 2019-08-24
  • 2012-11-16
  • 2017-03-29
  • 2020-11-14
  • 2020-07-20
  • 2017-08-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多