【问题标题】:Syfmony 4: Check if user has a "remember me" cookieSymfony 4:检查用户是否有“记住我”cookie
【发布时间】:2023-03-27 01:15:01
【问题描述】:

我已经阅读了这个documentation 并且可以看到如何使用isGranted('IS_AUTHENTICATED_REMEMBERED') 来确定用户是否通过任何方式登录,并使用IS_AUTHENTICATED_FULLY 来确定用户是否登录了该会话。是否有标准方法来确定用户是否专门使用了“记住我”cookie?

来自文档:

IS_AUTHENTICATED_REMEMBERED:所有登录的用户都有这个,即使 他们因为“记住我的 cookie”而登录。即使你 不要使用记住我功能,您可以使用它来检查是否 用户已登录。

那么如何判断用户是否使用了记住我的 cookie 进行身份验证?

例如:

public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
{

  $user = $token->getUser();
  if($user->hasRememberMeToken?) {
    //bypass multi-factor authentication
  }

【问题讨论】:

    标签: php symfony symfony4


    【解决方案1】:

    对于您的监听器,最简单的方法可能是检查您获得的令牌类型:

    if ($token instanceof RememberMeToken) {
        ...
    }
    

    Symfony 使用不同的令牌类型,因此默认情况下,您应该相对安全,因为此令牌是通过记住我功能获得的。但是,如果您有自定义逻辑,则可能不会那么容易。

    对此没有捷径可走,但您可以确保用户的角色符合未完全身份验证的要求,但通过记住我使用 Symfony\Component\Security\Core\Authorization\AuthorizationChecker 进行身份验证,如下所示:

    if ($checker->isGranted('IS_AUTHENTICATED_REMEMBERED') === true
        && $checker->isGranted('IS_AUTHENTICATED_FULLY') === false
    ) {
        ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-16
      • 2019-06-01
      • 1970-01-01
      • 2012-11-17
      • 1970-01-01
      • 1970-01-01
      • 2011-04-19
      • 1970-01-01
      相关资源
      最近更新 更多