首页 > 解决方案 > 如何实现一个,以便用户可以通过最多 2 个设备登录

问题描述

我正在一个 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 但我无法做到。我想要什么...请帮助我..提前谢谢

标签: javascriptphpjquerylaravel

解决方案


推荐阅读