where('token','=',$token); $query->where('expire','>',$time); })->withJoin('user','right')->find(); if($usertoken){ $auth=Config::get('site.auth'); //当登陆时间小于保持登陆时间的一半时,自动续时 if($auth['keepalive'] && $usertoken->expire-$time<$auth['keepalive_time']/2){ $usertoken->expire=$time+$auth['keepalive_time']; $usertoken->save(); } $usertoken->token=$token; $this->usertoken=$usertoken; } } public static function userinfo(string $token):int { return UserToken::where('token',$token)->where('expire','>', time())->value('user_id'); } public static function getUserToken($token):bool { return boolval(UserToken::where('token',$token)->where('expire','>', time())->order('id','asc')->count()); } public static function login(string $token,User $user) { $keepalive_time=Config::get('app.user_login.keepalive_time'); $token = md5($token); UserToken::create([ 'token'=> $token , 'user_id'=>$user->id, 'expire'=>time()+$keepalive_time ]); $allow_device_num=Config::get('app.user_login.allow_device_num'); //如果数据库中保存的设备数大于允许的设备数,如果超出则挤出去最早登陆的设备 $time=time(); $count=UserToken::where('user_id',$user->id)->where('expire','>',$time)->count(); if($count>$allow_device_num){ $usertoken=UserToken::where('user_id',$user->id)->where('expire','>',$time)->order('id','asc')->find(); $usertoken->delete(); } return $token ; } public function logout() { UserToken::where('token',$this->usertoken->token)->delete(); } }