JwtAdminMiddleware.php 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <?php
  2. namespace App\Http\Middleware;
  3. use App\Constants\HttpStatus;
  4. use App\Models\Admin;
  5. use Closure;
  6. use App\Services\AdminJwtSession;
  7. use Illuminate\Http\Request;
  8. use Illuminate\Support\Facades\Cache;
  9. class JwtAdminMiddleware
  10. {
  11. protected $jwtService;
  12. public function __construct(AdminJwtSession $jwtService)
  13. {
  14. $this->jwtService = $jwtService;
  15. }
  16. public function handle(Request $request, Closure $next)
  17. {
  18. $authHeader = $request->header('Authorization');
  19. if (empty($authHeader)) {
  20. $code = HttpStatus::AUTHORIZATION_HEADER_NOT_FOUND;
  21. return response()->json([
  22. 'code' => $code,
  23. 'timestamp' => time(),
  24. 'msg' => __('messages.' . $code),
  25. 'data' => []
  26. ]);
  27. }
  28. $token = str_replace('Bearer ', '', $authHeader);
  29. $user = $this->jwtService->validate($token);
  30. if ($user) {
  31. $request->user = Admin::findOrFail($user->user_id);
  32. $request->attributes->set('admin_jwt', $user);
  33. // 滑动续期:有操作就顺延空闲失效时间
  34. $this->jwtService->touch($user);
  35. //单点登录
  36. // $oldToken = Cache::get("user_{$request->user->getId()}_jwt");
  37. // if ($oldToken !== $token) {
  38. // $code = HttpStatus::AUTHORIZATION_HEADER_NOT_FOUND;
  39. // return response()->json([
  40. // 'code' => $code,
  41. // 'timestamp' => time(),
  42. // 'msg' => __('messages.' . $code),
  43. // 'data' => []
  44. // ]);
  45. // }
  46. return $next($request);
  47. }
  48. $code = HttpStatus::AUTHORIZATION_HEADER_NOT_FOUND;
  49. return response()->json([
  50. 'code' => $code,
  51. 'timestamp' => time(),
  52. 'msg' => __('messages.' . $code),
  53. 'data' => []
  54. ]);
  55. }
  56. }