Untitled
//import { showToast } from 'src/utils/app.utils' import axios from 'axios' export const axiosBaseConfigs = () => { const API_V1_URL = `${process.env.NEXT_PUBLIC_API}v1/` axios.defaults.baseURL = API_V1_URL axios.defaults.timeout = 15000 axios.interceptors.request.use( async function (config) { const token = localStorage.getItem('accessToken') const tokenOfSuperAdmin = localStorage.getItem('accessTokenSuperUser') if (tokenOfSuperAdmin && (config?.url?.includes('switch-branch') || config?.url?.includes('switch-user'))) { config.headers['Authorization'] = `Bearer ${tokenOfSuperAdmin}` } else { config.headers['Authorization'] = `Bearer ${token}` } return config }, function (error) { // Do something with request error return Promise.reject(error) } ) function createAxiosResponseInterceptor() { const interceptor = axios.interceptors.response.use( response => response, (error: any) => errorHandler(error) ) // =========================== const errorHandler = async (error: any) => { console.log('error:', error) const isInvalidToken = error?.response?.status === 401 const originalRequest = error.config const refreshToken = localStorage.getItem('refreshToken') if (isInvalidToken && refreshToken) { // ĐẦU TIÊN LÀ HỦY REQUEST ĐÃ axios.interceptors.response.eject(interceptor) localStorage.setItem('accessToken', refreshToken) originalRequest.headers['Authorization'] = 'Bearer ' + refreshToken return axios .get('auth/get-access-token') .then(refreshRes => { console.log('refreshRes:', refreshRes) if (refreshRes?.data) { localStorage.setItem('accessToken', refreshRes?.data.accessToken) originalRequest.headers['Authorization'] = 'Bearer ' + refreshRes.data.accessToken // Thực hiện lại request ban đầu với Access Token mới. Điều này giúp tránh lặp vô hạn và tiếp tục thực hiện request sau khi token đã được làm mới return axios(originalRequest) } }) .catch((err: any) => { console.log('errcatch:', err) return Promise.reject(err) }) // .finally(createAxiosResponseInterceptor) } return Promise.reject(error) } } createAxiosResponseInterceptor() }
Leave a Comment