我在symfony2中使用了基本的登录表单,它运行良好(没有FOSUSERBUNDLE)。 但是如果用户已经过身份验证,如何限制访问?
if ($this->get('security.context')->isGranted('ROLE_ADMIN')) { }
上面的代码不起作用,因为登录路由不在防火墙下......并抛出:
安全上下文不包含身份验证令牌。一个可能的原因可能是没有为此URL配置防火墙。
如何解决?
答案 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