Fixed issue where expired sessions showed "Unauthorized User" by implementing token refresh or redirect to login page. #70

Merged
vikas.nale merged 1 commits from Ashutosh_Bug#190_Request_JWT_Token into Issue_May_2W 2025-05-07 08:09:36 +00:00

View File

@ -21,8 +21,7 @@ axiosClient.interceptors.request.use(
if (token) { if (token) {
config.headers["Authorization"] = `Bearer ${token}`; config.headers["Authorization"] = `Bearer ${token}`;
config._retry = true; config._retry = true;
} } else {
else{
config._retry = false; config._retry = false;
} }
} }
@ -37,7 +36,6 @@ axiosClient.interceptors.response.use(
(response) => response, (response) => response,
async (error) => { async (error) => {
const originalRequest = error.config; const originalRequest = error.config;
if (!originalRequest) { if (!originalRequest) {
@ -81,17 +79,17 @@ 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");
} }
// else { // else {
// // showToast(error.response.data.message, "error"); // repeted toast // // showToast(error.response.data.message, "error"); // repeted toast
// } // }
if (error.response.status === 401 && !originalRequest._retry) { if (error.response.status === 401) {
originalRequest._retry = true; originalRequest._retry = true;
try { try {
// Get the refresh token from secure storage // Get the refresh token from secure storage
const refreshToken = localStorage.getItem("refreshToken"); const refreshToken = localStorage.getItem("refreshToken");
if (!refreshToken) { if (!refreshToken || error.response.data.errors === "Invalid or expired refresh token.") {
// Redirect to login if refresh token is not available // Redirect to login if refresh token is not available
redirectToLogin(); redirectToLogin();
return Promise.reject(error); return Promise.reject(error);
@ -108,7 +106,7 @@ axiosClient.interceptors.response.use(
const { token, refreshToken: newRefreshToken } = response.data.data; const { token, refreshToken: newRefreshToken } = response.data.data;
localStorage.setItem("jwtToken", token); localStorage.setItem("jwtToken", token);
localStorage.setItem("refreshToken", newRefreshToken); localStorage.setItem("refreshToken", newRefreshToken);
// Retry the original request with the new token // Retry the original request with the new token
originalRequest.headers["Authorization"] = `Bearer ${token}`; originalRequest.headers["Authorization"] = `Bearer ${token}`;
@ -116,7 +114,6 @@ axiosClient.interceptors.response.use(
// Retry the original request // Retry the original request
return axiosClient(originalRequest); return axiosClient(originalRequest);
} catch (err) { } catch (err) {
// Redirect to login if token refresh fails // Redirect to login if token refresh fails
redirectToLogin(); redirectToLogin();
return Promise.reject(err); return Promise.reject(err);
@ -192,5 +189,5 @@ export const api = {
}; };
//export default axiosClient; //export default axiosClient;
function redirectToLogin() { function redirectToLogin() {
// window.location.href = "/auth/login"; window.location.href = "/auth/login";
} }