49 lines
1.2 KiB
JavaScript
49 lines
1.2 KiB
JavaScript
import Axios from 'axios';
|
|
import { API_BASE_URL } from '../config';
|
|
import { isLoginPath, toAppPath } from './paths';
|
|
|
|
const api = Axios.create({
|
|
baseURL: API_BASE_URL,
|
|
headers: {
|
|
'Accept': 'application/json',
|
|
'Content-Type': 'application/json'
|
|
}
|
|
});
|
|
|
|
api.interceptors.request.use((config) => {
|
|
const token = localStorage.getItem('token');
|
|
if (token) {
|
|
config.headers.Authorization = `Bearer ${token}`;
|
|
}
|
|
return config;
|
|
});
|
|
|
|
api.interceptors.response.use(
|
|
(response) => {
|
|
return response;
|
|
},
|
|
(error) => {
|
|
// Si es un error 401 (No autorizado)
|
|
if (error.response && error.response.status === 401) {
|
|
localStorage.removeItem('token');
|
|
localStorage.removeItem('user');
|
|
|
|
// SOLUCIÓN: Solo recargamos y redirigimos si NO estamos ya en /login
|
|
if (!isLoginPath(window.location.pathname)) {
|
|
window.location.href = toAppPath('/login');
|
|
}
|
|
}
|
|
|
|
// Propagamos el error para que los componentes puedan leer backendData
|
|
if (error.response && error.response.data) {
|
|
return Promise.reject({
|
|
...error,
|
|
backendData: error.response.data
|
|
});
|
|
}
|
|
|
|
return Promise.reject(error);
|
|
}
|
|
);
|
|
|
|
export default api; |