Merge pull request 'Refactor token validation and refresh logic in ProtectedRoute component' (#37) from Vaibhav_Bug-#95 into Issues_April_4W
Reviewed-on: #37
This commit is contained in:
commit
ebb20b0612
@ -41,31 +41,32 @@ const isTokenExpired = (token) => {
|
|||||||
// Function to validate and refresh the token if expired
|
// Function to validate and refresh the token if expired
|
||||||
export const validateToken = async () => {
|
export const validateToken = async () => {
|
||||||
const token = localStorage.getItem("jwtToken");
|
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)) {
|
if (isTokenExpired(token)) {
|
||||||
const refreshed = await refreshToken();
|
return await attemptTokenRefresh(refreshTokenStored);
|
||||||
return refreshed;
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Function to refresh the access token
|
// Attempt to refresh the access token
|
||||||
const refreshToken = async () => {
|
const attemptTokenRefresh = async (storedRefreshToken) => {
|
||||||
try {
|
try {
|
||||||
AuthRepository.refreshToken({
|
const response = await AuthRepository.refreshToken({
|
||||||
token: localStorage.getItem("jwtToken"),
|
token: localStorage.getItem("jwtToken"),
|
||||||
refreshToken: refreshToken,
|
refreshToken: storedRefreshToken,
|
||||||
})
|
});
|
||||||
.then((response) => {
|
|
||||||
localStorage.setItem("jwtToken", response.data.token);
|
|
||||||
localStorage.setItem("refreshToken", response.data.refreshToken);
|
|
||||||
return true;
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
console.error("Token refresh failed:", error);
|
|
||||||
});
|
|
||||||
|
|
||||||
// api
|
localStorage.setItem("jwtToken", response.data.token);
|
||||||
|
localStorage.setItem("refreshToken", response.data.refreshToken);
|
||||||
|
return true;
|
||||||
|
// api
|
||||||
// .post("/api/auth/refresh-token", {
|
// .post("/api/auth/refresh-token", {
|
||||||
// token: localStorage.getItem("jwtToken"),
|
// token: localStorage.getItem("jwtToken"),
|
||||||
// refreshToken: refreshToken,
|
// refreshToken: refreshToken,
|
||||||
@ -92,8 +93,8 @@ const refreshToken = async () => {
|
|||||||
// }
|
// }
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("Token refresh failed:", error);
|
console.error("Token refresh failed:", error);
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export default ProtectedRoute;
|
export default ProtectedRoute;
|
||||||
|
|||||||
@ -48,7 +48,7 @@ axiosClient.interceptors.response.use(
|
|||||||
"Connection refused. Please ensure the server is running."
|
"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");
|
//showToast("Server is unreachable. Try again later!", "error");
|
||||||
console.log("1 - error fetching refresh token :", error);
|
console.log("1 - error fetching refresh token :", error);
|
||||||
} else {
|
} else {
|
||||||
@ -59,7 +59,7 @@ axiosClient.interceptors.response.use(
|
|||||||
}
|
}
|
||||||
} else if (error.code === "ERR_NETWORK") {
|
} else if (error.code === "ERR_NETWORK") {
|
||||||
console.error("Network error: Unable to reach the server.");
|
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");
|
//showToast("Server is unreachable. Try again later!", "error");
|
||||||
console.log("2 - error fetching refresh token :", error);
|
console.log("2 - error fetching refresh token :", error);
|
||||||
}
|
}
|
||||||
@ -67,7 +67,7 @@ axiosClient.interceptors.response.use(
|
|||||||
} else if (error.code === "ECONNABORTED") {
|
} else if (error.code === "ECONNABORTED") {
|
||||||
console.error("Request timed out.");
|
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");
|
//showToast("Server is unreachable. Try again later!", "error");
|
||||||
console.log("3 - error fetching refresh token :", error);
|
console.log("3 - error fetching refresh token :", error);
|
||||||
} else {
|
} else {
|
||||||
@ -77,7 +77,7 @@ axiosClient.interceptors.response.use(
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else if (error.response) {
|
} 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");
|
//showToast("Server is unreachable. Try again later!", "error");
|
||||||
console.log("4 - error fetching refresh token :", error);
|
console.log("4 - error fetching refresh token :", error);
|
||||||
} else {
|
} else {
|
||||||
@ -97,10 +97,14 @@ axiosClient.interceptors.response.use(
|
|||||||
return Promise.reject(error);
|
return Promise.reject(error);
|
||||||
}
|
}
|
||||||
// Make a request to refresh the access token
|
// Make a request to refresh the access token
|
||||||
const response = await axiosClient.post("/api/Auth/refresh-token", {
|
const response = await axiosClient
|
||||||
token: localStorage.getItem("jwtToken"),
|
.post("/api/Auth/refresh-token", {
|
||||||
refreshToken,
|
token: localStorage.getItem("jwtToken"),
|
||||||
});
|
refreshToken,
|
||||||
|
})
|
||||||
|
.catch((error) => {
|
||||||
|
console.log("7 - error fetching refresh token :", error);
|
||||||
|
});
|
||||||
|
|
||||||
const { token, refreshToken: newRefreshToken } = response.data.data;
|
const { token, refreshToken: newRefreshToken } = response.data.data;
|
||||||
localStorage.setItem("jwtToken", token);
|
localStorage.setItem("jwtToken", token);
|
||||||
@ -121,7 +125,7 @@ axiosClient.interceptors.response.use(
|
|||||||
return Promise.reject(err);
|
return Promise.reject(err);
|
||||||
}
|
}
|
||||||
} else {
|
} 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");
|
//showToast("Server is unreachable. Try again later!", "error");
|
||||||
console.log("6 - error fetching refresh token :", error);
|
console.log("6 - error fetching refresh token :", error);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user