2016-11-14 53 views
0

週末後我進入了我的網站主頁,我看到自己在主頁上登錄,主頁不適合登錄用戶!通常它工作正常,我不知道發生了什麼,如果我註銷並再次登錄它再次正常工作。Symfony2 - 用戶在一段時間後失去IS_AUTHENTICATED_FULLY角色

enter image description here

很少有與它的問題:

  1. 我進入我的主頁作爲登錄的用戶甚至儘管我清楚的狀態控制器:

    if ($this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_FULLY')) { 
        return $this->redirectToRoute('authorization'); 
    } 
    

所以我應該重定向到頁面授權,但我不是。

  • 我可以看到 「HOME」 鏈接中導航,但在我的菜單生成器的代碼,我檢查是否用戶IS_AUTHENTICATED_FULLY之前顯示它:

    if ($securityContext->getToken()) { 
        if(!$securityContext->isGranted('IS_AUTHENTICATED_FULLY')) { 
         $menu->addChild('HOME', array(
          'route' => 'homepage', 
          'attributes' => array(
           'class' => 'nav-li' 
          ) 
         )); 
        } 
    } 
    
  • 它似乎有時IS_AUTHENTICATED_FULLY不能用作檢查用戶是否登錄的方式。

    PS我在週五使用remember_me的表格登錄了網站,不確定是否有幾天的時間與它有關。

    這裏是我的防火牆(我在不同的頁面多次登錄表單):

    firewalls: 
        about: 
         pattern: ^/about 
         anonymous: ~ 
         provider: main 
         context: primary_auth 
         form_login: 
          login_path:    /about 
          check_path:    /about/login_check 
          default_target_path: /authorization 
         logout: 
          path: /logout 
          target: homepage 
         remember_me: 
          secret: '%secret%' 
          lifetime: 31536000 
    
        programs: 
         pattern: ^/programs 
         anonymous: ~ 
         provider: main 
         context: primary_auth 
         form_login: 
          login_path:    /programs 
          check_path:    /programs/login_check 
          default_target_path: /authorization 
         logout: 
          path: /logout 
          target: homepage 
         remember_me: 
          secret: '%secret%' 
          lifetime: 31536000 
    
        contacts: 
         pattern: ^/contacts 
         anonymous: ~ 
         provider: main 
         context: primary_auth 
         form_login: 
          login_path:    /contacts 
          check_path:    /contacts/login_check 
          default_target_path: /authorization 
         logout: 
          path: /logout 
          target: homepage 
         remember_me: 
          secret: '%secret%' 
          lifetime: 31536000 
    
        main: 
         pattern: ^
         anonymous: ~ 
         provider: main 
         context: primary_auth 
         form_login: 
          login_path:   /
          check_path:    /login_check 
          default_target_path: /authorization 
         logout: 
          path: /logout 
          target: homepage 
         remember_me: 
          secret: '%secret%' 
          lifetime: 31536000 
         oauth: 
          resource_owners: 
           trainee_facebook:  /login/check-facebook 
           trainee_linkedin:  /login/check-trainee-linkedin 
           trainee_xing:   /login/check-trainee-xing 
           company_linkedin:  /login/check-company-linkedin 
           company_xing:   /login/check-company-xing 
           university_linkedin: /login/check-university-linkedin 
           university_xing:  /login/check-university-xing 
          login_path:   /
          use_forward:   false 
          failure_path:   /failure-path 
          default_target_path: /authorization 
          oauth_user_provider: 
           service: my_custom_user_provider 
    

    UPDATE

    突然而不是IS_AUTHENTICATED_FULLYIS_AUTHENTICATED_REMEMBERED工作正常,我不明白爲什麼!有沒有任何解釋爲什麼用戶會失去IS_AUTHENTICATED_FULLY角色?

    回答

    1

    您的會話可能已過期,並且您使用「記住我」功能再次自動進行身份驗證。

    如文檔(http://symfony.com/doc/current/security.html#checking-to-see-if-a-user-is-logged-in-is-authenticated-fully)中所述,通過「記住我」功能驗證的用戶將不具有角色IS_AUTHENTICATED_FULLY

    在這種情況下,您應該檢查角色IS_AUTHENTICATED_REMEMBERED,該角色也授予「完全」身份驗證的用戶。

    我明白命名是令人困惑的,但您可以將角色IS_AUTHENTICATED_REMEMBERED視爲「已完全驗證或記住我」。

    +0

    完美的解釋。謝謝! 還有一個問題,我也使用社交媒體登錄,它不使用remember_me。它會檢測登錄用戶還是可以使用'if(IS_AUTHENTICATED_FULLY || IS_AUTENTICATED_REMEMBERED)'還是不可行? –

    +0

    這不是必需的,被授予'IS_AUTHENTICATED_FULLY'的用戶總是被授予'IS_AUTHENTICATED_REMEMBERED'。 – Gerry

    +0

    非常感謝您! –

    相關問題