Symfony 2 Form_Login Auth,login_check不会进行身份验证

时间:2015-02-17 18:27:40

标签: php symfony

我有一个form_login系统,当我尝试登录时,它会点击symfony内部处理的login_check方法。

但我明白了:

  

访问此资源需要完全身份验证。

现在我理解这一点,因为我的防火墙在该网址上处于活动状态。 令我困惑的是来自这里的文档的login_check:

Avoid Common Pitfalls

告诉我login_check路径必须在防火墙后面,否则它会 尝试搜索我将需要创建的不存在的控制器。

我完全糊涂了。

这是我的security.yml文件:

security:
    encoders:
        Brs\UserBundle\Entity\User:
            algorithm: bcrypt
            cost: 12

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

    providers:
        administrators:
            entity: { class: BrsUserBundle:User, property: fname }

    firewalls:
        login_firewall:
            pattern: ^/
            anonymous: ~
            context: website
        secured_area:
            pattern: ^/admin
            context: website
            form_login:
                login_path: /login
                check_path: /admin/login_check
                #default_target_path: /admin/hello
                #failure_path: /hello/1
            # logout:
            #     path: /admin/logout
                #target: /admin/hello
                # invalidate_session: false
    access_control:
        - { path: ^/admin, roles: ROLE_USER }
        - { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }

1 个答案:

答案 0 :(得分:1)

您的问题是因为您在限制区域内有检查登录路径。

        check_path: /admin/login_check

access_control:
    - { path: ^/admin, roles: ROLE_USER }

基本上你是说只有经过身份验证的用户才能进行身份验证。您需要将检查路径更改为未锁定在访问控制之后的某些内容,或者告知您的访问控制,对于未经过身份验证的用户,admin / login_check是可以的。

e.g。

check_path: /login_check

access_control:
    - { path: ^/admin/login_check, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/admin, roles: ROLE_USER }