如果用户通过身份验证,如何限制对登录表单的访问?

时间:2013-07-11 10:53:52

标签: symfony

我在symfony2中使用了基本的登录表单,它运行良好(没有FOSUSERBUNDLE)。 但是如果用户已经过身份验证,如何限制访问?

if ($this->get('security.context')->isGranted('ROLE_ADMIN')) { }

上面的代码不起作用,因为登录路由不在防火墙下......并抛出:

  

安全上下文不包含身份验证令牌。一个可能的原因可能是没有为此URL配置防火墙。

如何解决?

2 个答案:

答案 0 :(得分:1)

如上所述,如果您想要访问令牌/经过身份验证的用户,则登录URL必须位于防火墙下。这可以允许匿名访问和适当的访问控制规则。

firewalls:
    main:
        pattern: ^/
        # firewall settings
        anonymous:    true

access_control:
    - { path: ^/$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/, role: ROLE_USER }

答案 1 :(得分:0)

您需要使用防火墙
防火墙示例:

firewalls:
         main:
            pattern: ^/
            form_login:
                check_path: /
                login_path: /
                always_use_default_target_path: true
                default_target_path: /main
            logout:
                path: /logout
                target : /
            anonymous: true
            security: true

    access_control:
        - { path: ^/main, roles: ["ROLE_USER","ROLE_ADMIN"] }
        - { path: ^/admin, roles: ["ROLE_ADMIN"] }

http://symfony.com/doc/current/components/security/firewall.html