Refactor token validation and refresh logic in ProtectedRoute component #37

Merged
vikas.nale merged 2 commits from Vaibhav_Bug-#95 into Issues_April_4W 2025-04-20 08:27:33 +00:00
2 changed files with 31 additions and 26 deletions

View File

@ -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;

View File

@ -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);
}