JwtMiddleware.php 1.7 KB

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