как реализовать a, чтобы пользователь мог входить в систему максимум через 2 устройства

#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. спасибо за ваш комментарий … я тоже попробую