Untitled

 avatar
unknown
javascript
4 years ago
1.4 kB
5
Indexable
import axios from 'axios';

export const baseURL = process.env.REACT_APP_BACKEND_URL;

const axiosInstance = axios.create({
  baseURL,
});

axiosInstance.interceptors.response.use(
  response => response,
  error => {
    const originalRequest = error.config;
    const refreshToken = localStorage.getItem('refreshToken');
    const url = error?.response?.config.url;
    if (
      refreshToken &&
      error?.response?.status === 401 &&
      !originalRequest.retry &&
      !['/users/refresh', '/users/verify'].includes(url)
    ) {
      originalRequest.retry = true;
      return axiosInstance
        .post('/users/refresh', { refresh: refreshToken })
        .then(res => {
          localStorage.setItem('accessToken', res.data.access);
          localStorage.setItem('refreshToken', res.data.refresh);
          axiosInstance.defaults.headers.common.Authorization = `Bearer ${res.data.access}`;
          return axiosInstance({
            ...originalRequest,
            headers: {
              ...originalRequest.headers,
              Authorization: `Bearer ${res.data.access}`,
            },
          });
        });
    }
    return Promise.reject(
      (error.response && error.response.data) || {
        detail: 'Something went wrong',
      }
    );
  }
);




export { axiosInstance, axiosMockInstance };
Editor is loading...