JwtAdminMiddleware.php 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. <?php
  2. namespace App\Http\Middleware;
  3. use App\Constants\HttpStatus;
  4. use App\Models\Admin;
  5. use Closure;
  6. use App\Services\JwtService;
  7. use Illuminate\Http\Request;
  8. use Illuminate\Support\Facades\Cache;
  9. class JwtAdminMiddleware
  10. {
  11. protected $jwtService;
  12. public function __construct(JwtService $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->validateToken($token);
  30. if ($user) {
  31. $request->user = Admin::findOrFail($user->user_id);
  32. $oldToken = Cache::get("user_{$request->user->id}_jwt");
  33. if ($oldToken !== $token) {
  34. $code = HttpStatus::AUTHORIZATION_HEADER_NOT_FOUND;
  35. return response()->json([
  36. 'code' => $code,
  37. 'timestamp' => time(),
  38. 'msg' => __('messages.' . $code),
  39. 'data' => []
  40. ]);
  41. }
  42. return $next($request);
  43. return $next($request);
  44. }
  45. $code = HttpStatus::AUTHORIZATION_HEADER_NOT_FOUND;
  46. return response()->json([
  47. 'code' => $code,
  48. 'timestamp' => time(),
  49. 'msg' => __('messages.' . $code),
  50. 'data' => []
  51. ]);
  52. }
  53. }