Skip to content
Snippets Groups Projects
Select Git revision
  • da7bccf33232eada082dd7e673395392573a5d56
  • main default protected
2 results

axios.js

Blame
  • 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;