我遇到了symfony 2安全组件的有线问题。由于{{ app.user }}
对象仅在安全区域内可用,因此我将防火墙模式设置为^/
。现在我想要“无担保”一些页面,比如注册。我已经尝试使用access_control
,但它不起作用。
这是我的security.yml
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
login:
pattern: ^/account/login$
security: false
account_area:
pattern: ^/
form_login:
check_path: /account/login_check
login_path: /account/login
default_target_path: /account
remember_me:
key: blaBlubKey
lifetime: 3600
path: /
domain: ~
logout:
path: /account/logout
target: /
access_control:
#works
- { path: ^/backend, roles: ROLE_USER }
#works not
- { path: ^/registration, roles: IS_AUTHENTICATED_ANONYMOUSLY }
提前致谢!
答案 0 :(得分:10)
值得一提的是,这里的最佳做法是只使用一个带access_control的防火墙用于登录页面。为什么?如果登录用户尝试访问/登录页面,您会怎么做?如果他经过身份验证并重定向他,您将无法检入控制器,因为用户将通过主防火墙验证,但不会登录到登录防火墙,因为它们是单独的安全系统。
这是对我很有用的security.yml:
security:
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: true
anonymous: ~
secured_area:
pattern: ^/
anonymous: ~
form_login:
login_path: /login
check_path: /login_check
always_use_default_target_path: true
default_target_path: /
logout:
path: /logout
target: /
providers:
main:
entity: { class: Core\UserBundle\Entity\User, property: username }
access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin, roles: ROLE_SUPERADMIN }
- { path: ^/user, roles: ROLE_USER }
- { path: ^/, roles: IS_AUTHENTICATED_FULLY }
答案 1 :(得分:4)
在account_area中使用anynymous指令:
account_area:
pattern: ^/
anonymous: ~