From 64b2f33e42654563822e07005dc93c5aaf0a6876 Mon Sep 17 00:00:00 2001 From: IgorOlikov Date: Thu, 4 Apr 2024 01:10:04 +0500 Subject: [PATCH] jwt exceptions --- app/Exceptions/Handler.php | 33 +++++++++++++++++++++++++++++++++ resources/js/src/Axios/Api.js | 4 +++- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index 56af264..0acb0da 100755 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -3,7 +3,14 @@ namespace App\Exceptions; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; +use Illuminate\Http\Request; use Throwable; +use Tymon\JWTAuth\Exceptions\InvalidClaimException; +use Tymon\JWTAuth\Exceptions\JWTException; +use Tymon\JWTAuth\Exceptions\PayloadException; +use Tymon\JWTAuth\Exceptions\TokenBlacklistedException; +use Tymon\JWTAuth\Exceptions\TokenExpiredException; +use Tymon\JWTAuth\Exceptions\TokenInvalidException; class Handler extends ExceptionHandler { @@ -26,5 +33,31 @@ public function register(): void $this->reportable(function (Throwable $e) { // }); + + $this->renderable(function (TokenExpiredException $e, Request $request) { + return response()->json(['message' => 'Token has expired'], 401); + }); + + $this->renderable(function (TokenBlacklistedException $e, Request $request) { + return response()->json(['message' => 'Token in blacklist'], 400); + }); + + $this->renderable(function (TokenInvalidException $e, Request $request) { + return response()->json(['message' => 'Invalid token, could not decode token from JSON'], 400); + }); + + $this->renderable(function (InvalidClaimException $e, Request $request) { + return response()->json(['message' => 'Invalid token, invalid token claim'], 400); + }); + + $this->renderable(function (PayloadException $e, Request $request) { + return response()->json(['message' => 'Invalid token, invalid token payload'], 400); + }); + + $this->renderable(function (JWTException $e, Request $request) { + return response()->json(['message' => 'Token could not be parsed from the request'], 400); + }); + + } } diff --git a/resources/js/src/Axios/Api.js b/resources/js/src/Axios/Api.js index d779414..9190911 100644 --- a/resources/js/src/Axios/Api.js +++ b/resources/js/src/Axios/Api.js @@ -19,7 +19,7 @@ axiosJwtApi.interceptors.response.use((response) => { const authStore = useAuthStore(); console.log(error) const originalRequest = error.config - if (error.response.status === 500 && !originalRequest._retry) { + if (error.response.status === 401 && !originalRequest._retry) { originalRequest._retry = true; try { const response = await axios.post(`http://localhost/api/v1/auth/refresh-tokens`,null, { @@ -37,6 +37,8 @@ axiosJwtApi.interceptors.response.use((response) => { } return axiosJwtApi(originalRequest); + } else if (error.response.status === 401){ + //logout } })