Untitled
unknown
plain_text
2 years ago
2.6 kB
6
Indexable
//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()
}
Editor is loading...
Leave a Comment