我目前的项目几乎所有路线都受form_login
保护。
两条路由/login
和/user/forgot_password
应保持不受保护,以便未经过身份验证的用户可以访问。
有什么方法可以阻止经过身份验证的用户访问此路由吗?
在我的控制器中,我可以检查$this->getUser()
但是在非安全区域security.context
没有填充相应的数据。
配置(security.yml):
security:
firewalls:
nonsecured:
pattern: ^/(login|user/forgot_password)$
security: false
secured:
pattern: ^/
# ...
答案 0 :(得分:2)
如果没有活动防火墙,您将无法获取当前用户信息。以下是解决问题的方法:
nonsecured
防火墙,以便整个应用程序都被活动防火墙覆盖,anonymous: ~
添加到secured
防火墙使用访问控制来决定谁可以到达哪里:
access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/user/forgot-password, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/, roles: ROLE_USER }
要阻止对经过身份验证的用户访问/login
和/user/forgot-password
,您至少有以下两个选项:
使用JMSSecurityExtraBundle
的表达式:
access_control:
- { path: ^/login, access: 'isAnonymous()' }
- { path: ^/user/forgot-password, access: 'isAnonymous()' }
- { path: ^/, access: 'isAuthenticated()' }