Я пытаюсь разрешить только один сеанс для пользователя.Таким образом, если кто-то пытается войти в систему, когда он уже вошел в свою учетную запись пользователя, пользователь не может войти в систему.Второй пользователь может войти в систему только тогда, когда первый пользователь вышел из своей учетной записи.
Я использую дозорный для аутентификации.Итак, я добавил ниже код в метод входа в систему.
$user = \App\Models\User::where('email', $request->input('email'))->first();
if (!empty($user) && isset($user->session_id) && !empty($user->session_id))
{
return redirect()->back()->withErrors('First logout in other device')->withInput();
}
И я добавил session_id в моей таблице пользователей.Когда пользователь входит в систему, он сохраняет session_id для этого пользователя в БД.
$session_id = \Session::getId();
Sentinel::update($user, ['session_id' => $session_id]);
И я добавил ниже код в функции выхода из системы
Sentinel::update($user, ['session_id' => '']);
\Session::flush();
Он работает в потоке, когда первый пользователь входит водно устройство. при этом попытайтесь войти в систему с других устройств, он не сможет войти во второе устройство.Теперь, если он выйдет с первого устройства, session_id будет пустым.Так что теперь он сможет войти в систему на первом устройстве.
Теперь здесь проблема в том, что если сеанс уничтожается автоматически или пользователь закрывает браузер, то метод выхода из системы не будет вызываться, а session_id не будет пустым? .Здесь, даже если пользователь не входит в систему на первом устройстве, он не сможет войти на другое устройство.
Как я могу решить эту проблему?