#javascript #php #jquery #laravel
#javascript #php #jquery #laravel
Вопрос:
Я работаю на сайте lms, где пользователь может максимально войти в систему на 2 устройствах. До сих пор я пробовал этот приведенный ниже код, в котором я изменяю свой метод входа в контроллер входа.
if ($this->attemptLogin($request)) {
if (Auth::user()->role_id == 3) {
$logout = 0;
$logins = UserLogin::where('status', 1)->where('user_id', Auth::id())->latest()->get();
if (count($logins) == 2) {
foreach ($logins as $login) {
if ($login->created_at->addHours(2) < Carbon::now(env('TIME_ZONE'))) {
$login->status = 0;
$login->save();
$logout = 1;
}
}
if ($logout == 0) {
Auth::logout();
Toastr::error('Your Account is already logged in, in 2 devices', 'Error!');
return redirect()->route('login');
}
}
//storing login info
UserLogin::create([
'user_id' => Auth::id(),
'ip' => $request->ip(),
'browser' => Browser::browserName(),
'os' => Browser::platformName(),
'access_value' => Str::random(12),
]);
}
return $this->sendLoginResponse($request);
}
и в функциях выхода из системы я пробую это
if (Auth::user()->role_id == 3) {
$login = UserLogin::where('user_id', Auth::id())->where('ip', $request->ip())->where('browser', Browser::browserName())
->where('os', Browser::platformName())->where('status', 1)->latest()->first();
if ($login) {
$login->status = 0;
$login->access_value = null;
$login->save();
}
}
но это станет ненужным, когда пользователь закроет свои вкладки. Потому что в это время я не могу выполнить операцию с БД или не могу проверить статус.
Примечание: я пытался использовать javascript onunload и onbeforeunload, но у меня не получилось.чего я хочу…Пожалуйста, помогите мне .. заранее спасибо
Комментарии:
1. ДА… @MagnusEriksson я думаю, вы правы … хорошо, если я подумаю об устройствах, тогда что я могу сделать … можете ли вы дать мне подсказки или каким-то образом… Потому что требования пользователя — это в основном 2 устройства, а не браузеры.
2. Не уверен в целом вопросе, но если вы хотите отправить Ajax-запрос в unload, для этого есть API, который будет работать Navigator.sendBeacon() но пока я читаю документы, кажется, что вам не следует использовать этот API в unload onbeforeunload и использовать вместо этого событие изменения видимости страницы, но оно должно работать нормальнотам.
3. спасибо за ваш комментарий … я тоже попробую