迈出脚步
体验世界

Laravel限制单用户登录,同一时间仅一人可登录

思路其实很简单,在user表中新建个sid字段,每次用户执行登录操作是,更新sid字段,并将sid存入cookie。

然后比对cookie中的sid与数据库表中的sid是否一致,若不一致,则执行登出操作

LoginController

use Illuminate\Support\Facades\Cookie;
use Illuminate\Support\Str;
protected function sendLoginResponse(Request $request)
    {
        $request->session()->regenerate();

        $this->clearLoginAttempts($request);

        if ($response = $this->authenticated($request, $this->guard()->user())) {
            return $response;
        }
        $sid=Str::random(32); ////随机生成一个32为的字符串
        Cookie::queue("sid",$sid,60*24*60);///将此字符串存入cookie,时长为60天
        $this->guard()->user()->update(['sid'=>$sid]);///同时将sid更新到user表中

        return $request->wantsJson()
            ? new JsonResponse([], 204)
            : redirect()->intended($this->redirectPath());
    }

新建一个middleware,AuthSid.php

use Illuminate\Support\Facades\Cookie;
use Auth;

public function handle(Request $request, Closure $next)
    {
        if(Cookie::get('sid')!=Auth::user()->sid){
            Auth::guard()->logout();
            return redirect(route('login'));
        }
        return $next($request);
    }

Kernel.php中,将middleware加入

protected $routeMiddleware = [

    ///......
    'auth.sid'=>\App\Http\Middleware\AuthSid::class,
    ///.......

];

最后,路由中加入auth.sid的middleware

此方法的缺陷

后面登录的人,会直接将前面的人挤下线,而前面的人不会得到任何通知

赞(3) 喜欢我
未经允许不得转载:王威 » Laravel限制单用户登录,同一时间仅一人可登录
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏