From 9dc53d1dbae9be9c9087e02b9dc1d49163e70ea0 Mon Sep 17 00:00:00 2001 From: Vaibhav Surve Date: Sat, 19 Apr 2025 17:51:53 +0530 Subject: [PATCH 1/2] Refactor token validation and refresh logic in ProtectedRoute component --- src/router/ProtectedRoute.jsx | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/src/router/ProtectedRoute.jsx b/src/router/ProtectedRoute.jsx index 23d23fec..a1879e85 100644 --- a/src/router/ProtectedRoute.jsx +++ b/src/router/ProtectedRoute.jsx @@ -41,31 +41,32 @@ const isTokenExpired = (token) => { // Function to validate and refresh the token if expired export const validateToken = async () => { const token = localStorage.getItem("jwtToken"); + const refreshTokenStored = localStorage.getItem("refreshToken"); + // If refresh token is absent, cannot proceed + if (!refreshTokenStored) { + console.warn("No refresh token available. Redirecting to login."); + return false; + } + // If access token expired, try to refresh if (isTokenExpired(token)) { - const refreshed = await refreshToken(); - return refreshed; + return await attemptTokenRefresh(refreshTokenStored); } return true; }; -// Function to refresh the access token -const refreshToken = async () => { +// Attempt to refresh the access token +const attemptTokenRefresh = async (storedRefreshToken) => { try { - AuthRepository.refreshToken({ + const response = await AuthRepository.refreshToken({ token: localStorage.getItem("jwtToken"), - refreshToken: refreshToken, - }) - .then((response) => { - localStorage.setItem("jwtToken", response.data.token); - localStorage.setItem("refreshToken", response.data.refreshToken); - return true; - }) - .catch((error) => { - console.error("Token refresh failed:", error); - }); + refreshToken: storedRefreshToken, + }); - // api + localStorage.setItem("jwtToken", response.data.token); + localStorage.setItem("refreshToken", response.data.refreshToken); + return true; + // api // .post("/api/auth/refresh-token", { // token: localStorage.getItem("jwtToken"), // refreshToken: refreshToken, @@ -92,8 +93,8 @@ const refreshToken = async () => { // } } catch (error) { console.error("Token refresh failed:", error); + return false; } - return false; }; export default ProtectedRoute; From c6b11b8979a5f8a007b9cd0f4529e14b9564f141 Mon Sep 17 00:00:00 2001 From: Vikas Nale Date: Sun, 20 Apr 2025 13:57:02 +0530 Subject: [PATCH 2/2] Refresh Token Condition changes --- src/utils/axiosClient.jsx | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/utils/axiosClient.jsx b/src/utils/axiosClient.jsx index 99eaee6f..527ec140 100644 --- a/src/utils/axiosClient.jsx +++ b/src/utils/axiosClient.jsx @@ -48,7 +48,7 @@ axiosClient.interceptors.response.use( "Connection refused. Please ensure the server is running." ); - if (error.config.url.indexOf("refresh-token") == -1) { + if (error.config.url.indexOf("refresh-token") != -1) { //showToast("Server is unreachable. Try again later!", "error"); console.log("1 - error fetching refresh token :", error); } else { @@ -59,7 +59,7 @@ axiosClient.interceptors.response.use( } } else if (error.code === "ERR_NETWORK") { console.error("Network error: Unable to reach the server."); - if (error.config.url.indexOf("refresh-token") == -1) { + if (error.config.url.indexOf("refresh-token") != -1) { //showToast("Server is unreachable. Try again later!", "error"); console.log("2 - error fetching refresh token :", error); } @@ -67,7 +67,7 @@ axiosClient.interceptors.response.use( } else if (error.code === "ECONNABORTED") { console.error("Request timed out."); - if (error.config.url.indexOf("refresh-token") == -1) { + if (error.config.url.indexOf("refresh-token") != -1) { //showToast("Server is unreachable. Try again later!", "error"); console.log("3 - error fetching refresh token :", error); } else { @@ -77,7 +77,7 @@ axiosClient.interceptors.response.use( ); } } else if (error.response) { - if (error.config.url.indexOf("refresh-token") == -1) { + if (error.config.url.indexOf("refresh-token") != -1) { //showToast("Server is unreachable. Try again later!", "error"); console.log("4 - error fetching refresh token :", error); } else { @@ -97,10 +97,14 @@ axiosClient.interceptors.response.use( return Promise.reject(error); } // Make a request to refresh the access token - const response = await axiosClient.post("/api/Auth/refresh-token", { - token: localStorage.getItem("jwtToken"), - refreshToken, - }); + const response = await axiosClient + .post("/api/Auth/refresh-token", { + token: localStorage.getItem("jwtToken"), + refreshToken, + }) + .catch((error) => { + console.log("7 - error fetching refresh token :", error); + }); const { token, refreshToken: newRefreshToken } = response.data.data; localStorage.setItem("jwtToken", token); @@ -121,7 +125,7 @@ axiosClient.interceptors.response.use( return Promise.reject(err); } } else { - if (error.config.url.indexOf("refresh-token") == -1) { + if (error.config.url.indexOf("refresh-token") != -1) { //showToast("Server is unreachable. Try again later!", "error"); console.log("6 - error fetching refresh token :", error); }