MysqlAdapter.php 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <?php
  2. declare(strict_types=1);
  3. namespace app\api\service\auth;
  4. use think\facade\Cookie;
  5. use app\common\model\UserToken;
  6. use app\common\model\User;
  7. use think\facade\Config;
  8. class MysqlAdapter
  9. {
  10. private UserToken $usertoken;
  11. public function userinfo():array|false
  12. {
  13. if(isset($this->usertoken)){
  14. return $this->usertoken->user->toArray();
  15. }
  16. return false;
  17. }
  18. public function getUserToken():UserToken|false
  19. {
  20. if(isset($this->usertoken)){
  21. return $this->usertoken;
  22. }
  23. return false;
  24. }
  25. public function login(string $token,User $user)
  26. {
  27. $keepalive_time=Config::get('app.auth.keepalive_time');
  28. $token = md5($token);
  29. $this->usertoken=UserToken::create([
  30. 'token' => $token,
  31. 'user_id'=> $user->id,
  32. 'expire' => time()+$keepalive_time
  33. ]);
  34. $this->usertoken->token=$token;
  35. $this->usertoken->user=$user;
  36. $allow_device_num=Config::get('app.auth.allow_device_num');
  37. //如果数据库中保存的设备数大于允许的设备数,如果超出则挤出去最早登陆的设备
  38. $time=time();
  39. $count=UserToken::where('user_id',$user->id)->where('expire','>',$time)->count();
  40. if($count>$allow_device_num){
  41. $usertoken=UserToken::where('user_id',$user->id)->where('expire','>',$time)->order('id','asc')->find();
  42. $usertoken->delete();
  43. }
  44. Cookie::set('token', $token ,$keepalive_time);
  45. return $token;
  46. }
  47. public function logout()
  48. {
  49. UserToken::where('token',$this->usertoken->token)->delete();
  50. Cookie::delete('token');
  51. }
  52. }