在loginAction中重定向

时间:2014-05-27 08:42:10

标签: symfony symfony-2.3

如果用户通过身份验证,我想在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配置防火墙。

如果用户已登录,我可以进行重定向。

1 个答案:

答案 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"