Compare commits

...

3 Commits

2 changed files with 46 additions and 58 deletions

View File

@ -46,13 +46,6 @@ const LoginPage = () => {
console.log("Unable to proceed. Please try again."); console.log("Unable to proceed. Please try again.");
setLoading(false); setLoading(false);
if (err.status === 401) {
showToast(err.response.data);
} else
{
showToast("Unable to proceed. Please try again.","error");
}
} }
}; };
return ( return (

View File

@ -3,7 +3,6 @@ import { useNavigate } from "react-router-dom";
import axiosRetry from "axios-retry"; import axiosRetry from "axios-retry";
import showToast from "../services/toastService"; import showToast from "../services/toastService";
const base_Url = process.env.VITE_BASE_URL; const base_Url = process.env.VITE_BASE_URL;
export const axiosClient = axios.create({ export const axiosClient = axios.create({
baseURL: base_Url, // Your Web API URL baseURL: base_Url, // Your Web API URL
withCredentials: false, // Required if the API uses cookies withCredentials: false, // Required if the API uses cookies
@ -25,9 +24,7 @@ axiosClient.interceptors.request.use(
} }
return config; return config;
}, },
(error) => { (error) => Promise.reject(error)
return Promise.reject(error);
}
); );
// // Response interceptor to handle responses globally (optional) // // Response interceptor to handle responses globally (optional)
@ -38,67 +35,65 @@ axiosClient.interceptors.response.use(
// debugger; // debugger;
const originalRequest = error.config; const originalRequest = error.config;
if (error.code === "ERR_CONNECTION_REFUSED") { if (!originalRequest) {
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();
return Promise.reject(error); 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 ( // Prevent multiple toasts for the same request
error.response && if (!originalRequest._toastShown) {
error.response.status === 401 && originalRequest._toastShown = true;
!originalRequest._retry
) {
originalRequest._retry = 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; // debugger;
// 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) {
// 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);
} }
// 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.post("/api/Auth/refresh-token", {
token: localStorage.getItem("jwtToken"), token: localStorage.getItem("jwtToken"),
refreshToken: refreshToken, 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 // Retry the original request with the new token
localStorage.setItem("jwtToken", token); originalRequest.headers["Authorization"] = `Bearer ${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 // Retry the original request
return api(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);
}
} else {
showToast(error.response.data?.message || "An error occurred. Please try again.", "error");
}
} else {
console.error("An unknown error occurred:", error.message);
} }
} }