例如我想要 - 如果用户从Google Chrome登录并尝试从Firefox登录,则上一个会话应自动销毁,并显示警告消息。 到目前为止,我已经在下面做了,这实际上不是正确的方法,因为它可以正常工作,但是当用户由于会话超时或浏览器关闭或关闭而自动注销时,数据库不会更新,因为它应该是 -
protected function authenticated(Request $request, $user)
{
$previous_token = $user->token_id;
$token = $request->session()->token();
if ($previous_token == NULL) {
Auth::user()->token_id = $token;
Auth::user()->save();
}elseif ($previous_token == $token) { }
else
{
if ($previous_token != $token) {
Auth::logout();
}
}
}
public function logout(Request $request, User $user)
{
Auth::user()->token_id = NULL;
Auth::user()->save();
$this->guard()->logout();
$request->session()->invalidate();
return redirect('/');
}
请帮助我。在此先感谢:)
答案 0 :(得分:1)
执行您想要的操作的一种方法是生成新的随机字符串/哈希(您可以使用str_random
辅助函数和可选的Hash::make
来帮助您)当用户登录时作为令牌,然后将其存储在数据库和浏览器端( cookie ,因此它不受会话超时影响)。
然后你可以制作一个中间件或修改现有的中间件以检查两个令牌是否相同,并在用户没有时将其记录下来(和/或提醒他们)。
由于浏览器不共享cookie,因此使用其中一个登录将使另一个存储的令牌无效,从而结束该会话。