CheckTokenMiddleware.php 1.5 KB

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