我尝试使用symfony cookbook并专门尝试安全章节。我的security.yml和routing.yml如下:
security.yml:
security:
encoders:
Acme\UserBundle\Entity\User:
algorithm: sha1
encode_as_base64: false
iterations: false
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
providers:
administrators:
entity: { class: AcmeUserBundle:User, property: email }
firewalls:
login_firewall:
pattern: ^/login
anonymous: ~
register_area:
pattern: ^/register
anonymous: ~
secured_area:
pattern: ^/
anonymous: ~
form_login: ~
access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/, roles: ROLE_USER }
的routing.yml:
login:
pattern: /login
defaults: { _controller: AcmeUserBundle:Account:login }
login_check:
pattern: /login_check
一切正常,但login_check
表示无法找到控制器。这正是陷阱没有。 3在这里说:
http://symfony.com/doc/current/book/security.html#book-security-common-pitfalls
所以我不确定我做错了什么。我知道在Stackoverflow上有类似的问题,但我无法理解他们的解决方案,它对我不起作用,sry。为什么login_check
不在防火墙后面?我认为它会落后于secured_area
,因为模式为^/
,这显然与/login_check
匹配。
我的理解问题:anonymous ~
究竟做了什么?
答案 0 :(得分:1)
自己找到它。
<强> security.yml:强>
security:
encoders:
Acme\UserBundle\Entity\User:
algorithm: sha1
encode_as_base64: false
iterations: false
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
providers:
administrators:
entity: { class: AcmeUserBundle:User, property: email }
firewalls:
secured_area:
pattern: ^/
anonymous: ~
form_login: ~
access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/, roles: ROLE_USER }
由于secured_area
已经有anonymous: ~
,因此无需为login
和register
声明额外的防火墙。
答案 1 :(得分:-1)
您的回答是在FOSUSerBundle中 控制器中有假动作