Skip to content

Instantly share code, notes, and snippets.

@cakmakok
Created November 10, 2020 10:27
Show Gist options
  • Save cakmakok/914aedb7ee242815735cb5b83a589ec9 to your computer and use it in GitHub Desktop.
Save cakmakok/914aedb7ee242815735cb5b83a589ec9 to your computer and use it in GitHub Desktop.
export const interceptor = (store) => {
axios.interceptors.response.use(response => {
console.log(`request to ${response.config.url} OK with ${response.status}`)
return Promise.resolve(response)
}, (error) => {
console.log(`request to ${error.response.config.url} failed with ${error.response.status}`)
if (error.response.status == 401) {
const failedRequestConfig = error.config
// Now, refresh the token and try failed request again.
// First check if refresh request got 401?
if (error.response.config.url === "api/user/refresh/" ) {
console.log("refresh token request got 401. Handle this situation to prevent loop")
console.log("clear tokens and logout user")
localStorage.clear();
// redirect user to login page.
store.dispatch(logout());
console.log(`throw ${error}`)
return Promise.reject(error)
} else {
// if no refresh token is found we cant reclaim the token so,
// route user to login page
if (!localStorage.getItem("refresh")) {
console.log(`no refresh token found,throwing ${error}`)
store.dispatch(logout());
return Promise.reject(error)
}
console.log("an endpoint got 401 so try to refresh token...")
axios.post(`api/user/refresh/`, {refresh: localStorage.getItem("refresh")}).then(response => {
const {access, refresh} = response.data
// this function stores access token to localStorage.
setAuthorizationToken(access);
localStorage.setItem("access", access);
localStorage.setItem("refresh", refresh);
failedRequestConfig.headers["Authorization"] = `JWT ${access}`;
console.log(`try ${failedRequestConfig.url} with new token again...`);
return axios(failedRequestConfig);
}
)
}
} else {
console.log("throwing error for 40x...")
return Promise.reject(error)
}
})
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment