Symfony 4:检查用户是否有 "remember me" cookie

Syfmony 4: Check if user has a "remember me" cookie

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

来自文档:

IS_AUTHENTICATED_REMEMBERED: All logged in users have this, even if they are logged in because of a "remember me cookie". Even if you don't use the remember me functionality, you can use this to check if the user is logged in.

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

例如:

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

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

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

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

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

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

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