CheckToken.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. <?php
  2. namespace App\Http\Middleware;
  3. use Closure;
  4. use App\Models\Admin;
  5. use Illuminate\Http\Request;
  6. use Illuminate\Support\Facades\Log;
  7. use Tymon\JWTAuth\Facades\JWTAuth;
  8. use Tymon\JWTAuth\Exceptions\JWTException;
  9. use Tymon\JWTAuth\Exceptions\TokenExpiredException;
  10. use Tymon\JWTAuth\Exceptions\TokenInvalidException;
  11. use Tymon\JWTAuth\Exceptions\TokenBlacklistedException;
  12. use Illuminate\Contracts\Auth\Factory as Auths;
  13. class CheckToken
  14. {
  15. protected $auth;
  16. public function __construct(Auths $auth){
  17. $this->auth = $auth;
  18. }
  19. public function handle(Request $request, Closure $next)
  20. {
  21. try {
  22. if (! $user = JWTAuth::parseToken()->authenticate()) { //获取到用户数据,并赋值给$user
  23. return response()->json([
  24. 'code' => 401,
  25. 'msg' => 'user not found'
  26. ]);
  27. }
  28. $user_id = (int) $this->auth->user()->id;
  29. $admin = Admin::find($user_id);
  30. if($admin->status == 0){
  31. $result = [
  32. "code"=>'450001',
  33. "msg"=>'账号已禁用'
  34. ];
  35. return response()->json($result);
  36. }
  37. // if(!in_array($user_id,['39516','49428', '32531'])){
  38. // log::info('用户没有权限访问');
  39. // $result = [
  40. // "code"=>'403',
  41. // "message"=>'用户没有权限访问'
  42. // ];
  43. // return response()->json($result);
  44. // }
  45. return $next($request);
  46. } catch (TokenExpiredException $e) {
  47. try {
  48. $token = JWTAuth::parseToken()->refresh();
  49. // 使用一次性登录以保证此次请求的成功
  50. JWTAuth::setToken($token);
  51. $request->user = JWTAuth::authenticate($token);
  52. $request->headers->set('Authorization','Bearer '.$token);
  53. } catch (TokenBlacklistedException $exception){
  54. // token 令牌已刷新
  55. return response()->json([
  56. 'code' => 401,
  57. 'msg' => 'token 无效,已刷新' //token无效
  58. ]);
  59. } catch (JWTException $e){
  60. // token 令牌 刷新时间超时,或使用失效的 token 刷新
  61. return response()->json([
  62. 'code' => 401,
  63. 'msg' => '缺少token失效' , //token
  64. ]);
  65. }
  66. }catch (TokenBlacklistedException $exception){
  67. // token 令牌被拉黑
  68. return response()->json([
  69. 'code' => 401,
  70. 'msg' => 'token 无效,被拉黑' //token无效
  71. ]);
  72. } catch (TokenInvalidException $e) {
  73. return response()->json([
  74. 'code' => 401,
  75. 'msg' => 'token 无效', //token无效
  76. ]);
  77. } catch (JWTException $e) {
  78. return response()->json([
  79. 'code' => 401,
  80. 'msg' => '缺少token' , //token为空
  81. ]);
  82. }
  83. // 在响应头中返回新的 token
  84. return $next($request)->withHeaders([
  85. 'Authorization'=> 'Bearer '.$token,
  86. ]);
  87. }
  88. }