How To Use Axios Interceptors For Refreshing API Token


import axios from 'axios';
import Constanta from '../../screens/Constanta';
import AsyncStorage from '@react-native-community/async-storage';
import {TokenStorage} from './TokenStorage';
const axiosInstance = axios.create({
headers: {
'Content-Type': 'application/json',
},
});
axiosInstance.interceptors.request.use(
async request => {
const token = await AsyncStorage.getItem('token');
if (token) {
request.headers.common['Authorization'] = `bearer ${token}`;
}
const res = token;
return request;
},
error =>
new Promise((resolve, reject) => {
reject(error);
}),
);
axiosInstance.interceptors.response.use(
response => {
return response;
},
async error => {
const originalRequest = error.config;
if (error.response.status === 401) {
return TokenStorage.getNewToken()
.then(response => {
const config = error.config;
if (response.status) {
TokenStorage.storeToken(response.token);
TokenStorage.storeRefreshToken(response.refresh_token);
config.headers['Authorization'] = `bearer ${response.token}`;
return new Promise((resolve, reject) => {
axios
.request(config)
.then(res => {
resolve(res);
})
.catch(err => {
reject(err);
});
});
}
})
.catch(error => {
Promise.reject(error);
});
}
return new Promise((resolve, reject) => {
reject(error);
});
},
);
export default axiosInstance;

Note: Only a member of this blog may post a comment.