Laravel 5.6: 强制注销记住我登录

Laravel 5.6: Force logout remember me login

我的应用程序中有一个自定义登录控制器,可防止每个用户进行多个会话。如果用户从另一个 device/browser:

登录,它会注销用户
public function authenticated(Request $request, $user) {
  $previous_session = $user->session_id;

  if ($previous_session) {
    session()->getHandler()->destroy($previous_session);
  }

  auth()->user()->session_id = session()->getId();
  auth()->user()->save();

  return redirect(session()->pull('from', $this->redirectTo));
}

不管会话驱动程序如何,此代码在 users table 上查找 session_id 并销毁与其关联的会话。

但是,如果用户在启用记住我复选框的情况下登录,这将不起作用。用户使用之前的 device/browser 保持登录状态。我怎样才能告诉 laravel 在第二次登录后忘记这个记住我?谢谢

您必须使 users 数据库 table 中的 remember_token 无效或循环。

这会在您调用 Auth::logout() 时自动发生。

remember_token 也可以手动失效,类似于 Laravel 的处理方式:

protected function cycleRememberToken(AuthenticatableContract $user)
{
    $user->setRememberToken($token = Str::random(60));

    $this->provider->updateRememberToken($user, $token);
}

来源:laravel/framework/src/Illuminate/Auth/SessionGuard.php