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

时间:2018-12-02 20:12:46

标签: php session cookies laravel-5.6 remember-me

我的应用程序中有一个自定义登录控制器,可防止每个用户进行多个会话。如果用户从其他设备/浏览器登录,它将注销该用户:

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));
}

无论会话驱动程序如何,此代码都会在session_id表上查找users,并销毁与之关联的会话。

但是,如果用户使用“记住我”复选框登录,则此方法无效。用户保持使用先前设备/浏览器的登录状态。在第二次登录后,如何告诉laravel忘记这一点?谢谢。

1 个答案:

答案 0 :(得分:1)

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

这会在您致电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