CheckTokenMiddleware.php 1.7 KB

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