costco-grocery-list/frontend/src/api/axios.js

40 lines
1013 B
JavaScript

import axios from "axios";
import { API_BASE_URL } from "../config";
const api = axios.create({
baseURL: API_BASE_URL,
headers: {
"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 => response,
error => {
const payload = error.response?.data;
const normalizedMessage = payload?.error?.message || payload?.message;
if (payload?.error?.message && payload.message === undefined) {
payload.message = payload.error.message;
}
if (error.response?.status === 401 &&
normalizedMessage === "Invalid or expired token") {
localStorage.removeItem("token");
window.location.href = "/login";
alert("Your session has expired. Please log in again.");
}
return Promise.reject(error);
}
);
export default api;