Laravel позволяет один сеанс на пользователя - PullRequest
0 голосов
/ 04 июня 2019

Я пытаюсь разрешить только один сеанс для пользователя.Таким образом, если кто-то пытается войти в систему, когда он уже вошел в свою учетную запись пользователя, пользователь не может войти в систему.Второй пользователь может войти в систему только тогда, когда первый пользователь вышел из своей учетной записи.

Я использую дозорный для аутентификации.Итак, я добавил ниже код в метод входа в систему.

$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 не будет пустым? .Здесь, даже если пользователь не входит в систему на первом устройстве, он не сможет войти на другое устройство.

Как я могу решить эту проблему?

1 Ответ

0 голосов
/ 04 июня 2019

Лучше всего использовать Redis.Запишите пользователя, который вошел в систему, и у него есть тайм-аут, который он должен учитывать, когда он вошел в систему и не сделал ничего, чтобы его пропустить.

redis in laravel

...