Select Git revision
axios.js 1.36 KiB
import axios from 'axios';
const api = axios.create({
baseURL: process.env.REACT_APP_API_URL || '/api',
withCredentials: true,
headers: {
'Content-Type': 'application/json',
}
});
api.interceptors.request.use(config => {
const token = sessionStorage.getItem('accessToken');
const expiresAt = sessionStorage.getItem('tokenExpiresAt');
if (token) {
// 토큰 만료 체크
if (expiresAt && Date.now() >= parseInt(expiresAt)) {
sessionStorage.removeItem('accessToken');
sessionStorage.removeItem('tokenExpiresAt');
if (!window.location.pathname.includes('/login')) {
alert('로그인이 만료되었습니다. 다시 로그인해주세요.');
window.location.href = '/login';
}
return Promise.reject('Token expired');
}
config.headers.Authorization = `Bearer ${token}`;
}
return config;
});
api.interceptors.response.use(
response => response,
error => {
// 401 에러 처리
if (error.response?.data.statusCode === 401) {
sessionStorage.removeItem('accessToken');
sessionStorage.removeItem('tokenExpiresAt');
if (!window.location.pathname.includes('/login')) {
alert('로그인이 필요합니다. 로그인 페이지로 이동합니다.');
window.location.href = '/login';
}
}
return Promise.reject(error);
}
);
export default api;