Symfony 2 Form_Login Auth,Login_check将不进行身份验证


Symfony 2 Form_Login Auth , login_check will not Authenticate

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

但我得到了:

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

现在我明白了这一点,因为我的防火墙在那个url上是活动的。让我困惑的是这里的文档中的login_check:

避免常见缺陷

告诉我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 }

您的问题是因为您的检查登录路径位于受限区域。

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

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

例如

check_path: /login_check

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