Fixed issue where expired sessions showed "Unauthorized User" by implementing token refresh or redirect to login page. #70
@ -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";
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user