我有一个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 }