Files
next-admin-mojrian/src/axios/axiosInstance.ts
T
2026-06-13 08:15:04 +03:30

90 lines
2.8 KiB
TypeScript

'use client'
import axios from 'axios'
//let accessToken = localStorage.getItem('access') ? localStorage.getItem('access') : null
function setCookieFn(name:string, value:string, daysToExpire:number) {
const expires = new Date();
expires.setTime(expires.getTime() + (daysToExpire * 24 * 60 * 60 * 1000));
document.cookie = `${name}=${value};expires=${expires.toUTCString()};path=/`;
}
const axiosInstance = axios.create({
baseURL: `${process.env.NEXT_PUBLIC_API_URL}/`,
timeout: 10000,
headers: {
'Content-Type': 'application/json',
//'Authorization': `Bearer ${accessToken}`,
}
});
axiosInstance.interceptors.request.use(async req => {
const accessT = localStorage.getItem('admin_at')
req.headers.Authorization = `Bearer ${accessT}`
return req
})
axiosInstance.interceptors.response.use((response)=> {
return response
}, async (error) =>{
const originalRequest = error.config;
if (error.response.status === 401 && !originalRequest._retry) {
originalRequest._retry = true; // Prevent infinite loops
try {
if (localStorage.getItem('admin_rt') != 'undefined'){
const res = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/auth/refresh-token/`, {
method: "POST",
headers: {
'Content-Type': 'application/json; charset=UTF-8',
},
body: JSON.stringify({
'refresh': localStorage.getItem('admin_rt')
})
});
if(res.status==200){
setCookieFn('isAuth', 'true', 365)
const tokenData = await res.json()
localStorage.setItem('admin_at', tokenData.access)
localStorage.setItem('admin_rt',tokenData.refresh)
originalRequest.headers.Authorization = `Bearer ${tokenData.access}`
return axiosInstance(originalRequest)
}else{
}
} else {
localStorage.removeItem('admin_at');
localStorage.removeItem('admin_rt');
document.cookie = "isAuth=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
setTimeout(()=>{
window.location.replace('/login')
}, 200)
}
} catch(refreshError) {
localStorage.removeItem('admin_at');
localStorage.removeItem('admin_rt');
document.cookie = "isAuth=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
setTimeout(()=>{
window.location.replace('/login')
}, 200)
throw refreshError;
}
}
// Return a Promise rejection if the status code is not 401
return Promise.reject(error);
});
export default axiosInstance