如果用户通过身份验证,我想在loginAction中进行重定向。
我的security.yml。
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
login:
pattern: ^/(en|de)/login
security: false
secured_area:
pattern: ^/
anonymous: ~
http_basic:
realm: "Secured Area"
form_login:
check_path: frontend_account_security_check
login_path: frontend_account_login
#use_referer: true
#always_use_default_target_path: true
default_target_path: frontend_main_index
#default_target_path: frontend_account_my_account
#target_path_parameter: frontend_account_my_account
logout:
path: /de/secured/logout
target: /de/
#default_target_path: frontend_account_login
#anonymous: ~
http_basic:
realm: "Secured Demo Area"
access_control:
#- { path: ^/secured/en/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/(en|de)/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
我的行动:
$auth = $this->get('security.context')->getToken()->getUser();
if ($auth == 'anon.') {
$auth = FALSE;
} else {
return $this->redirect($this->generateUrl('frontend_main_index'));
}
我的错误: 在非对象上调用成员函数getUser()
我也尝试过:$this->get('security.context')->isGranted('ROLE_USER')
错误:
安全上下文不包含身份验证令牌。一个可能的原因可能是没有为此URL配置防火墙。
如果用户已登录,我可以进行重定向。
答案 0 :(得分:2)
问题似乎是这一部分:
login:
pattern: ^/(en|de)/login
security: false
从security.yml
中移除此内容,您应该可以使用
$this->get('security.context')->isGranted('ROLE_USER')
并相应地重定向。我认为这与防火墙不共享其安全上下文有关。有关Symfony Security
的文档中可以找到详细说明另请注意,您应该删除
http_basic:
realm: "Secured Area"
或
http_basic:
realm: "Secured Demo Area"