CheckTokenMiddleware.php 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. <?php
  2. namespace App\Http\Middleware;
  3. use Tymon\JWTAuth\Http\Middleware\BaseMiddleware;
  4. use Tymon\JWTAuth\Exceptions\TokenExpiredException;
  5. use Tymon\JWTAuth\Exceptions\JWTException;
  6. use Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException;
  7. use Closure;
  8. use Auth;
  9. use Illuminate\Http\Request;
  10. class CheckTokenMiddleware extends BaseMiddleware
  11. {
  12. /**
  13. * Handle an incoming request.
  14. *
  15. * @param \Illuminate\Http\Request $request
  16. * @param \Closure $next
  17. * @return mixed
  18. */
  19. public function handle($request, Closure $next)
  20. {
  21. // 检查此次请求中是否带有 token,如果没有则抛出异常。
  22. try{
  23. $this->checkForToken($request);
  24. }catch (\Exception $exception){
  25. return response()->json([
  26. 'code'=>50000,
  27. 'status' => 'fail',
  28. 'message' => '请先进行登录',
  29. 'data' => $data ?? null,
  30. 'error' => null,
  31. ]);
  32. }
  33. // 使用 try 包裹,以捕捉 token 过期所抛出的 TokenExpiredException 异常
  34. try {
  35. // 检测用户的登录状态,如果正常则通过
  36. if ($this->auth->parseToken()->authenticate()) {
  37. return $next($request);
  38. }
  39. return response()->json([
  40. 'code'=>50000,
  41. 'msg'=>'请先登录',
  42. ]);
  43. } catch (TokenExpiredException $exception) {
  44. try {
  45. return response()->json([
  46. 'code'=>50001,
  47. 'msg'=>'登录失效',
  48. ]);
  49. } catch (JWTException $exception) {
  50. return response()->json([
  51. 'code'=>50001,
  52. 'msg'=>'登录失效,请重新登陆',
  53. ]);
  54. }
  55. }
  56. }
  57. }