Session 使用laravel 5.5中的单个帐户限制在不同浏览器中多次登录
例如,我想要像- 如果用户从google chrome登录并试图从Firefox登录,则上一个会话将自动销毁,并显示一条警告消息。 到目前为止,我已经做了以下工作,这实际上不是正确的方法,因为手动注销可以正常工作,但当用户由于会话超时或浏览器关闭或关闭而自动注销时,数据库不会按应有的方式更新-Session 使用laravel 5.5中的单个帐户限制在不同浏览器中多次登录,session,login,laravel-5.5,Session,Login,Laravel 5.5,例如,我想要像- 如果用户从google chrome登录并试图从Firefox登录,则上一个会话将自动销毁,并显示一条警告消息。 到目前为止,我已经做了以下工作,这实际上不是正确的方法,因为手动注销可以正常工作,但当用户由于会话超时或浏览器关闭或关闭而自动注销时,数据库不会按应有的方式更新- protected function authenticated(Request $request, $user) { $previous_token = $user->token_id; $to
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('/');
}
请在这方面帮助我。提前感谢:)一种方法是在用户登录时生成新的随机字符串/哈希值(您可以使用
stru random
helper函数和可选的hash::make
来帮助您)作为令牌,然后将其存储在数据库和浏览器端(cookie,因此它不受会话超时的影响)
然后,您可以制作一个中间件或修改现有的中间件,以检查这两个令牌是否相同,并在不相同时注销用户(和/或提醒用户)
由于浏览器不共享cookie,使用其中一个浏览器登录将使另一个浏览器存储的令牌无效,从而结束该会话。谢谢Pietro…但仍然找不到解决方案。如果可能,请更新我提供的代码!如果用户登录Firfox而未注销,则关闭borwser,然后从其他浏览器返回浏览器,他能从第二个浏览器登录吗?有另一种方法可以从laravel官方文档中找到,那就是-需要在你的app/Http/Kernel.php class'web中间件组中取消注释:
'web'=>[\light\Session\middleware\AuthenticateSession::class,],
然后受保护的功能验证(请求$Request){$password=$Request->password;Auth::logoutOtherDevices($password);}