ParentBase.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <?php
  2. namespace app\parent;
  3. use app\BaseController;
  4. use app\common\model\base\user\JwtToken;
  5. use app\common\model\guardian\JdfGuardian;
  6. class ParentBase extends BaseController
  7. {
  8. /** 用户信息 */
  9. protected $userinfo;
  10. protected $org;
  11. /** 无需登录的方法 */
  12. protected $noNeedLogin = [];
  13. // 初始化方法
  14. public function initialize()
  15. {
  16. parent::initialize();
  17. $this->token = $_SERVER["HTTP_AUTHORIZATION"] ?? $_SERVER['HTTP_TOKEN'] ?? $this->request->param('token');
  18. $this->action = strtolower($this->app->request->action(true));
  19. $this->checkLogin();
  20. }
  21. /**
  22. * @title:[验证登录]
  23. * @return json|{*}
  24. * @Author: byl
  25. * @Date:2023/8/9 16:31
  26. */
  27. private function checkLogin()
  28. {
  29. if ($this->token) {
  30. $checkTokenRes = config('develop.jwt_open') ? JwtToken::Decode($this->token) : $this->checkToken($this->token);
  31. } else {
  32. $checkTokenRes = [
  33. 'code' => 401,
  34. 'msg' => '用户暂未登录(token为空)',
  35. ];
  36. }
  37. //无需登录--需登录或者需要权限的请求都要验证登录
  38. if ($checkTokenRes['code'] != 1 && !in_array($this->action, $this->noNeedLogin)) {
  39. return Result($checkTokenRes['code'] ?? -1, $checkTokenRes['msg'] ?? '',);
  40. // throw new \Exception($checkTokenRes['msg'] ?? '', $checkTokenRes['code'] ?? -1);
  41. } else {
  42. $this->userinfo = $checkTokenRes['data'] ?? [];
  43. $this->org = $this->userinfo['org'] ?? null;
  44. }
  45. // //无需登录--需登录或者需要权限的请求都要验证登录
  46. // if (!in_array($this->action, $this->noNeedLogin)) {
  47. // $checkTokenRes = config('develop.jwt_open') ? JwtToken::Decode($this->token) : $this->checkToken($this->token);
  48. // if ($checkTokenRes['code'] != 1) {
  49. // throw new \Exception($checkTokenRes['msg']??"", $checkTokenRes['code']??-1);
  50. // } else {
  51. // $this->userinfo = $checkTokenRes['data'];
  52. // $this->org = $this->userinfo['org'] ?? null;
  53. // }
  54. // }
  55. }
  56. /** 通用验证TOKEN是否有效 */
  57. protected function checkToken($token = "")
  58. {
  59. //检查token是否有效
  60. if (!self::checkUserToken($token)) {
  61. return Result(-1, "登录失效,请重新登录");
  62. }
  63. $user = self::tokenUser($token);
  64. if (!$user) {
  65. return Result(0, "未找到用户");
  66. } elseif ($user->status <> 1) {
  67. return Result(0, "您的帐号已被禁用,请联系管理员");
  68. } else {
  69. return Result(1, "验证成功", $user);
  70. }
  71. }
  72. //更新TOKEN
  73. static public function updatetoken($uid)
  74. {
  75. $timeout = time() + 86400;
  76. $uInfo = JdfGuardian::withoutField('delete_at,password,salt')->find($uid);
  77. $token = self::createtoken(json_encode($uInfo));
  78. $info = [
  79. 'uid' => $uid,
  80. 'token' => $token,
  81. 'timeout' => $timeout,
  82. 'user' => $uInfo,
  83. 'user_id' => $uid
  84. ];
  85. cache('PARENT' . $token, $info, 86400);
  86. return $token;
  87. }
  88. //生成TOKEN
  89. static private function createtoken($string)
  90. {
  91. return md5($string . time() . rand(10000000, 99999999));
  92. }
  93. //检查TOKEN有效性
  94. static public function checkUserToken($token = '')
  95. {
  96. $info = cache('PARENT' . $token);
  97. return !empty($info);
  98. }
  99. // 获取token用户
  100. static public function tokenUser($token)
  101. {
  102. try {
  103. $tokenUser = cache('PARENT' . $token);
  104. $user = $tokenUser['user'];
  105. return $user;
  106. } catch (\Exception $e) {
  107. WLog('GETTOKENUSER', $e->getFile() . $e->getLine() . $e->getMessage() . ",TOKEN:$token");
  108. return null;
  109. }
  110. }
  111. }