How To Use Axios Interceptors For Refreshing API Token
Less than a minute 1632
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; |