Symfony2 chain_provider in_memory用户登录“错误凭据”

时间:2014-02-05 20:01:52

标签: php symfony

我希望有一个硬编码管理员用户,其余用户来自数据库。当我使用db用户登录时,它可以正常工作,但是如果我使用硬编码的admin用户登录,则会显示“Bad credentials”错误。这是我的security.yml文件的一部分:

security:
    encoders:
        Valoran\DrushBundle\Entity\User:
            algorithm: bcrypt
            cost:      15

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

providers:
    chain_provider:
        chain:
            providers: [in_memory, user_db]
    in_memory:
        memory:
            users:
                foo: { password: test }
    user_db:
        entity: { class: Acme\DrushBundle\Entity\User, property: userName }

1 个答案:

答案 0 :(得分:4)

我遇到了同样的问题,我添加了答案,让其他人更容易看到。 如果你得到

  

没有为帐户配置编码器   " Symfony的\元器件\安全\核心\用户\用户"连锁供应商

您需要添加如下所示的编码器(对于数据库用户和内存中的用户)[security.yml]

security:
    encoders:
        Splendonia\Bundle\UserBundle\Entity\User:
            algorithm: sha512
            encode-as-base64: true
            iterations: 10
        Symfony\Component\Security\Core\User\User: plaintext

使用一个或多个提供商。文档是here,看起来像这样:

providers:
        chain_provider:
            chain:
                providers: [in_memory, main]
        in_memory:
            memory:
                users:
                    guest:  { password: guest, roles: [ 'ROLE_GUEST' ] }
        main:
            entity: { class: Splendonia\Bundle\UserBundle\Entity\User, property: email }

还记得在防火墙上将提供程序更改为chain_provider,它看起来像这样:

firewalls:
        dev:
            pattern:  ^/(_(profiler|wdt)|css|images|js)/
            security: false

        login:
            pattern:  ^/demo/secured/login$
            security: false

        secured_area:
            pattern:    ^/
            anonymous: ~
            provider: chain_provider
            form_login:
                login_path: login
                check_path: login_check
                default_target_path: /dashboard

            logout:
                path:   /logout
                target: /

那应该这样做。