AdminRefreshToken.php 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. <?php
  2. namespace App\Http\Middleware;
  3. use Illuminate\Support\Facades\Auth;
  4. use Closure;
  5. use Tymon\JWTAuth\Exceptions\JWTException;
  6. use Tymon\JWTAuth\Http\Middleware\BaseMiddleware;
  7. use Tymon\JWTAuth\Exceptions\TokenExpiredException;
  8. class AdminRefreshToken extends BaseMiddleware
  9. {
  10. /**
  11. * Handle an incoming request.
  12. *
  13. * @param \Illuminate\Http\Request $request
  14. * @param \Closure $next
  15. * @return mixed
  16. */
  17. public function handle($request, Closure $next)
  18. {
  19. // 检查此次请求中是否带有 token,如果没有则抛出异常。
  20. $this->checkForToken($request);
  21. // 使用 try 包裹,以捕捉 token 过期所抛出的 TokenExpiredException 异常
  22. // // 检测用户的登录状态,如果正常则通过
  23. if (Auth::guard('admin')->check()) {
  24. $admin_id = Auth::guard('admin')->payload()['sub'];
  25. $time = Auth::guard('admin')->payload()['exp'];
  26. //var_dump(Auth::guard('admin')->payload()['nbf'],$time);exit;
  27. //刷新Token
  28. if(($time - time()) < 60*60 && ($time - time()) > 0){
  29. $token = Auth::guard('admin')->refresh();
  30. if($token){
  31. $request->headers->set('Authorization', 'Bearer '.$token);
  32. }else{
  33. return response()->json(['error_code'=>401,'msg'=>'token有误,请重新登录'],401);
  34. }
  35. // 在响应头中返回新的 token
  36. $respone = $next($request);
  37. if(isset($token) && $token){
  38. $respone->headers->set('Authorization', 'Bearer '.$token);
  39. }
  40. return $respone;
  41. }
  42. //token通过验证 执行下一补操作
  43. return $next($request);
  44. }
  45. return response()->json(['error_code'=>401,'msg'=>'未登录,请登录'],401);
  46. }
  47. }