Compare commits
3 Commits
850b2e6998
...
959e4dd7dd
Author | SHA1 | Date | |
---|---|---|---|
959e4dd7dd | |||
899dac5afd | |||
0cfd60dbe4 |
@ -46,13 +46,6 @@ const LoginPage = () => {
|
||||
console.log("Unable to proceed. Please try again.");
|
||||
setLoading(false);
|
||||
|
||||
if (err.status === 401) {
|
||||
showToast(err.response.data);
|
||||
} else
|
||||
{
|
||||
showToast("Unable to proceed. Please try again.","error");
|
||||
|
||||
}
|
||||
}
|
||||
};
|
||||
return (
|
||||
|
@ -3,7 +3,6 @@ import { useNavigate } from "react-router-dom";
|
||||
import axiosRetry from "axios-retry";
|
||||
import showToast from "../services/toastService";
|
||||
const base_Url = process.env.VITE_BASE_URL;
|
||||
|
||||
export const axiosClient = axios.create({
|
||||
baseURL: base_Url, // Your Web API URL
|
||||
withCredentials: false, // Required if the API uses cookies
|
||||
@ -25,9 +24,7 @@ axiosClient.interceptors.request.use(
|
||||
}
|
||||
return config;
|
||||
},
|
||||
(error) => {
|
||||
return Promise.reject(error);
|
||||
}
|
||||
(error) => Promise.reject(error)
|
||||
);
|
||||
|
||||
// // Response interceptor to handle responses globally (optional)
|
||||
@ -38,67 +35,65 @@ axiosClient.interceptors.response.use(
|
||||
// debugger;
|
||||
const originalRequest = error.config;
|
||||
|
||||
if (error.code === "ERR_CONNECTION_REFUSED") {
|
||||
console.error("Connection refused. Please ensure the server is running.");
|
||||
showToast(
|
||||
"Unable to connect to the server. Please try again later.",
|
||||
"error"
|
||||
);
|
||||
}
|
||||
if (error.code === "ERR_NETWORK") {
|
||||
console.error(
|
||||
"Unable to connect server. Please ensure the server is running."
|
||||
);
|
||||
showToast("Server is unreachable. Try again later.!", "error");
|
||||
|
||||
originalRequest._retry = false;
|
||||
redirectToLogin();
|
||||
if (!originalRequest) {
|
||||
return Promise.reject(error);
|
||||
} else if (error.code === "ECONNABORTED") {
|
||||
console.error("Request timed out.");
|
||||
showToast("The request took too long. Please try again later.", "error");
|
||||
} else {
|
||||
console.error("An error occurred:", error.message);
|
||||
}
|
||||
|
||||
if (
|
||||
error.response &&
|
||||
error.response.status === 401 &&
|
||||
!originalRequest._retry
|
||||
) {
|
||||
originalRequest._retry = true;
|
||||
// Prevent multiple toasts for the same request
|
||||
if (!originalRequest._toastShown) {
|
||||
originalRequest._toastShown = true;
|
||||
|
||||
try {
|
||||
if (error.code === "ERR_CONNECTION_REFUSED") {
|
||||
console.error("Connection refused. Please ensure the server is running.");
|
||||
showToast("Unable to connect to the server. Please try again later.", "error");
|
||||
} else if (error.code === "ERR_NETWORK") {
|
||||
console.error("Network error: Unable to reach the server.");
|
||||
showToast("Server is unreachable. Try again later!", "error");
|
||||
redirectToLogin();
|
||||
} else if (error.code === "ECONNABORTED") {
|
||||
console.error("Request timed out.");
|
||||
showToast("The request took too long. Please try again later.", "error");
|
||||
} else if (error.response) {
|
||||
console.error("Error response:", error.response.status, error.response.data);
|
||||
|
||||
if (error.response.status === 401 && !originalRequest._retry) {
|
||||
originalRequest._retry = true;
|
||||
|
||||
try {
|
||||
// debugger;
|
||||
// Get the refresh token from secure storage
|
||||
const refreshToken = localStorage.getItem("refreshToken");
|
||||
const refreshToken = localStorage.getItem("refreshToken");
|
||||
|
||||
if (!refreshToken) {
|
||||
if (!refreshToken) {
|
||||
// Redirect to login if refresh token is not available
|
||||
redirectToLogin();
|
||||
return Promise.reject(error);
|
||||
}
|
||||
redirectToLogin();
|
||||
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: refreshToken,
|
||||
});
|
||||
const response = await axiosClient.post("/api/Auth/refresh-token", {
|
||||
token: localStorage.getItem("jwtToken"),
|
||||
refreshToken,
|
||||
});
|
||||
|
||||
const { token } = response.data.data;
|
||||
const { token, refreshToken: newRefreshToken } = response.data.data;
|
||||
localStorage.setItem("jwtToken", token);
|
||||
localStorage.setItem("refreshToken", newRefreshToken);
|
||||
|
||||
// Save the new access token
|
||||
localStorage.setItem("jwtToken", token);
|
||||
localStorage.setItem("refreshToken", response.data.data.refreshToken);
|
||||
|
||||
// Update the original request with the new token
|
||||
originalRequest.headers["Authorization"] = `Bearer ${token}`;
|
||||
// Retry the original request with the new token
|
||||
originalRequest.headers["Authorization"] = `Bearer ${token}`;
|
||||
|
||||
// Retry the original request
|
||||
return api(originalRequest);
|
||||
} catch (err) {
|
||||
return axiosClient(originalRequest);
|
||||
} catch (err) {
|
||||
// Redirect to login if token refresh fails
|
||||
redirectToLogin();
|
||||
return Promise.reject(err);
|
||||
redirectToLogin();
|
||||
return Promise.reject(err);
|
||||
}
|
||||
} else {
|
||||
showToast(error.response.data?.message || "An error occurred. Please try again.", "error");
|
||||
}
|
||||
} else {
|
||||
console.error("An unknown error occurred:", error.message);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user