1

我有带有登录表单的登录页面。因此,如果用户已经登录,我想将他从登录页面重定向到另一个页面。安全区域是所有页面,.*/secured.html登录页面 url 是 - login/page.html。当我尝试时,$this->container->get('security.context');我得到了没有安全令牌的错误,因为当前页面不在安全区域之下。因此,如果我想使用令牌(如果存在),我应该将所有这些页面添加到安全区域吗?这样 symfony2 将每次检查用户是否已登录(并且可能会重定向到登录页面)但如果我添加

    login:
            pattern:  ^/demo/secured/login$
            security: false

身份验证令牌也将不存在。

那么在所有应用程序页面使用身份验证令牌的方法是什么?或者所有这些页面都应该添加到安全区域?

4

2 回答 2

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

干杯。

于 2013-09-06T23:48:47.907 回答
0

因此,如果我想使用令牌(如果存在),我应该将所有这些页面添加到安全区域吗?

是的,您必须将那些要访问安全令牌的地方放在防火墙后面。如果您还想在登录页面访问安全令牌,您还必须将其放在同一防火墙后面。但随后将其访问控制设置为IS_AUTHENTICATED_ANONYMOUSLY.

access_control:
    - { path: ^/secured/login/page.html$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
于 2013-09-07T00:02:15.630 回答