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