我正在尝试找出如何只允许每个用户一个会话。
因此,如果有人在已经登录其用户帐户的情况下尝试登录,第一个会话将被销毁,并将被注销以仅允许当前会话。
我正在关注这个:如何在 Laravel 中保持每个用户的单个会话 https://anupamsaha.wordpress.com/2015/09/02/how-to-keep-single-session-per-user-in-laravel/。但我不知道应该把这些代码放在哪里:
/**
* Swap a user session with a current one
*
* @param \App\User $user
* @return boolean
*/
protected function swapUserSession($user)
{
if (!($user instanceof \App\User)) {
return false;
}
$new_session_id = Session::getId(); //get new session_id after user sign in
$last_session = Session::getHandler()->read($user->last_session_id); // retrive last session
if ($last_session) {
Session::getHandler()->destroy($user->last_session_id);
}
$user->last_session_id = $new_session_id;
$user->save();
return true;
}
我目前使用的是 Laravel 5.1,所以我可以找到的唯一用于 Auth 的控制器是 AuthController.php,但它说将其放在 LoginController.php 上
如果您使用文件驱动程序,您可以将以下方法添加到 App\Http\Controllers\Auth\AuthController.php (在 Laravel 5.2 中测试)
/**
* Only allow one concurrent session per user
*
* @param Request $request
* @param User $user
* @return Response
*/
protected function authenticated(Request $request, User $user)
{
Session::put('user_id', $user->id);
$files = array_diff(scandir(storage_path('framework/sessions')), array('.', '..', '.gitignore'));
foreach ($files as $file) {
$filepath = storage_path('framework/sessions/' . $file);
$session = unserialize(file_get_contents($filepath));
if ($session['user_id'] === $user->id && $session['_token'] !== Session::get('_token')) {
unlink($filepath);
}
}
return redirect()->intended($this->redirectPath());
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)