Untitled
unknown
javascript
2 years ago
1.9 kB
14
Indexable
// router and axios
import axios from 'axios'
// variables
const baseURL = process.env.NEXT_PUBLIC_HOST
// create axios call
const api_client = axios.create({
baseURL: baseURL,
})
const fetcher = url => api_client.get(url).then(res => res.data)
// axios request (add token to headers)
api_client.interceptors.request.use(
async config => {
let token = localStorage.getItem('access_token') ? localStorage.getItem('access_token') : null
config.headers = { 'Authorization': `Bearer ${token}` }
return config
},
error => {
Promise.reject(error)
});
// axios response (refresh token or logout)
api_client.interceptors.response.use(
(res) => {
return res
},
async (error) => {
if (error.response.status === 401) {
const refresh_token = localStorage.getItem('refresh_token') ? localStorage.getItem('refresh_token') : null
if (refresh_token !== null) {
await axios.post(`${baseURL}api/token/refresh/`, { refresh: refresh_token }).then(response => {
if (response.status === 200) {
localStorage.clear()
localStorage.setItem('access_token', response.data.access)
localStorage.setItem('refresh_token', response.data.refresh)
return api_client(error.config)
} else {
localStorage.clear()
console.log(response);
window.location.href = `/login`;
}
}).catch(error => {
console.log(error);
localStorage.clear()
window.location.href = `/login`;
});
}
}
return Promise.reject(error)
}
)
export { api_client, fetcher }
Editor is loading...
Leave a Comment