Symfony2 - 用户在一段时间后失去了IS_AUTHENTICATED_FULLY角色

时间:2016-11-14 09:49:07

标签: symfony authentication oauth authorization

周末后我进入了我的网站主页,我看到自己登录主页,主页不是登录用户!通常它工作正常,我不知道发生了什么,如果我退出并再次登录它再次正常工作。

enter image description here

它几乎没有问题:

  1. 我以登录用户的身份进入了我的主页,即使我在控制器中明确说明:

     if ($this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_FULLY')) {
         return $this->redirectToRoute('authorization');
     }
    
  2. 所以我应该被重定向到页面授权,但我不是。

    1. 我可以看到" HOME"导航中的链接,但在我的菜单构建器代码中,我在显示之前检查用户是否为IS_AUTHENTICATED_FULLY

      if ($securityContext->getToken()) {
          if(!$securityContext->isGranted('IS_AUTHENTICATED_FULLY')) {
              $menu->addChild('HOME', array(
                  'route' => 'homepage',
                  'attributes' => array(
                      'class' => 'nav-li'
                  )
              ));
          }
      }
      
    2. 有时似乎IS_AUTHENTICATED_FULLY无法检查用户是否已登录。

      P.S。我在星期五使用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
      

      更新

      突然而不是IS_AUTHENTICATED_FULLYIS_AUTHENTICATED_REMEMBERED工作正常,我不明白为什么!有没有解释为什么用户会在当时失去IS_AUTHENTICATED_FULLY角色?

1 个答案:

答案 0 :(得分:2)

您的会话可能已过期,并且您使用“记住我”功能再次自动进行身份验证。

如文档(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视为“完全认证或记住我”。