50 lines
1.4 KiB
TypeScript
50 lines
1.4 KiB
TypeScript
import axios from 'axios';
|
|
|
|
export const axiosInstance = axios.create();
|
|
|
|
//getting new tokens
|
|
export const getNewTokens = async () => {
|
|
try {
|
|
const refreshToken = localStorage.getItem('refreshToken');
|
|
const { data } = await axiosInstance.get(
|
|
`${process.env.REACT_APP_API_URL}/token/refresh?refreshToken=${refreshToken}`,
|
|
);
|
|
localStorage.setItem('userPrivilige',data.authorityRole);
|
|
localStorage.setItem('userToken', data.token);
|
|
localStorage.setItem('refreshToken', data.refreshToken);
|
|
return data.token;
|
|
} catch (e) {
|
|
console.log(e);
|
|
}
|
|
};
|
|
|
|
axiosInstance.interceptors.request.use(
|
|
(request) => {
|
|
const token = localStorage.getItem('userToken');
|
|
|
|
request.headers['Content-Type'] = 'application/json';
|
|
request.headers['Authorization'] = token ? `Bearer ${token}` : '';
|
|
return request;
|
|
},
|
|
(error) => {
|
|
Promise.reject(error);
|
|
},
|
|
);
|
|
|
|
// Response interceptor for API calls
|
|
axiosInstance.interceptors.response.use(
|
|
(response) => {
|
|
return response;
|
|
},
|
|
async (error) => {
|
|
const originalRequest = error.config;
|
|
if (error.response.status === 403 && !originalRequest._retry) {
|
|
originalRequest._retry = true;
|
|
const access_token = await getNewTokens();
|
|
axios.defaults.headers.common['Authorization'] = `Bearer ${access_token}`;
|
|
return axiosInstance(originalRequest);
|
|
}
|
|
return Promise.reject(error);
|
|
},
|
|
);
|