我有一个form_login系统,当我尝试登录时,它会点击symfony内部处理的login_check方法。
但我明白了:
访问此资源需要完全身份验证。
现在我理解这一点,因为我的防火墙在该网址上处于活动状态。 令我困惑的是来自这里的文档的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 }
答案 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 }