我有登录页面的登录页面。因此,如果用户已经登录,我想将他从登录页面重定向到另一个。安全区域是.*/secured.html
的所有页面,登录页面网址为 - login/page.html
。当我尝试$this->container->get('security.context');
时,我收到错误,因为当前页面不在安全区域下,因此没有安全令牌。那么如果我想使用令牌(如果存在)我应该将所有这些页面添加到安全区域吗?这样symfony2每次都会检查用户是否已登录(并且可能会重定向到登录页面)但如果我添加
login:
pattern: ^/demo/secured/login$
security: false
身份验证令牌也不存在。
那么在所有应用程序页面上使用auth令牌的方法是什么?或者所有这些页面都应该添加到安全区域?
答案 0 :(得分:2)
如果您关闭安全性,则表示您没有令牌。您的登录页面必须放在防火墙后面。不,你不必 将所有单个页面添加到您的设置中。
以下是一个例子:
firewalls:
main:
pattern: ^/
form_login:
login_path: /account/login
check_path: /account/login_check
logout:
path: /account/logout
anonymous: true
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
access_control:
- { path: ^/account/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/account/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/movie/, role: ROLE_USER }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/, role: ROLE_ADMIN }
如您所见,我在所有页面上激活了安全性,但我将允许匿名访问。
使用此访问控制:- { path: ^/movie/, role: ROLE_USER }
我完全可以控制哪个用户可以访问该页面,
这意味着用户已经登录。
如需深入了解,我可以推荐文档:http://symfony.com/doc/current/book/security.html
干杯。
答案 1 :(得分:0)
因此,如果我想使用令牌(如果存在),我应该将所有这些页面添加到 安全区域?
是的,您必须将要访问安全令牌的位置放在防火墙后面。如果您还想在登录页面中访问安全令牌,则还必须将其置于同一防火墙后面。但是然后将其作为IS_AUTHENTICATED_ANONYMOUSLY
进行访问控制。
access_control:
- { path: ^/secured/login/page.html$, roles: IS_AUTHENTICATED_ANONYMOUSLY }