Files
GestionIntegralWeb/Frontend/src/services/apiClient.ts

58 lines
2.2 KiB
TypeScript
Raw Normal View History

import axios from 'axios';
2025-06-17 18:29:32 -03:00
// Vite reemplazará import.meta.env.VITE_API_BASE_URL con el valor del .env
// durante la compilación. Si no está definida, usará la URL de desarrollo.
const API_BASE_URL = import.meta.env.VITE_API_BASE_URL || 'http://localhost:5183/api';
const apiClient = axios.create({
baseURL: API_BASE_URL,
headers: {
'Content-Type': 'application/json',
},
});
// Interceptor para añadir el token JWT a las peticiones (si existe)
apiClient.interceptors.request.use(
(config) => {
const token = localStorage.getItem('authToken'); // O donde guardes el token
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
},
(error) => {
return Promise.reject(error);
}
);
apiClient.interceptors.response.use(
(response) => {
// Cualquier código de estado que este dentro del rango de 2xx causa la ejecución de esta función
return response;
},
(error) => {
// Cualquier código de estado que este fuera del rango de 2xx causa la ejecución de esta función
if (axios.isAxiosError(error) && error.response) {
if (error.response.status === 401) {
// Token inválido o expirado
console.warn("Error 401: Token inválido o expirado. Deslogueando...");
// Limpiar localStorage y recargar la página.
// AuthContext se encargará de redirigir a /login al recargar porque no encontrará token.
localStorage.removeItem('authToken');
localStorage.removeItem('authUser'); // Asegurar limpiar también el usuario
// Forzar un hard refresh para que AuthContext se reinicialice y redirija
// Esto también limpiará cualquier estado de React.
// --- Mostrar mensaje antes de redirigir ---
alert("Tu sesión ha expirado o no es válida. Serás redirigido a la página de inicio de sesión.");
window.location.href = '/login'; // Redirección más directa
}
}
// Es importante devolver el error para que el componente que hizo la llamada pueda manejarlo también si es necesario
return Promise.reject(error);
}
);
// Puedes añadir interceptores de respuesta para manejar errores globales (ej: 401 Unauthorized)
export default apiClient;