Skip to content

Instantly share code, notes, and snippets.

@Ronnasayd
Last active September 24, 2021 18:28
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Ronnasayd/74c359a21a3bd74c752f8c2afd7cf1ec to your computer and use it in GitHub Desktop.
Save Ronnasayd/74c359a21a3bd74c752f8c2afd7cf1ec to your computer and use it in GitHub Desktop.
Exemplo de como fazer o refresh token com axios
import axios from "axios";
import { getBaseURL } from "./config";
export const client = axios.create({
baseURL: getBaseURL()
});
// for multiple requests
let isRefreshing = false;
let failedQueue = [];
const processQueue = (error, token = null) => {
failedQueue.forEach(prom => {
if (error) {
prom.reject(error);
} else {
prom.resolve(token);
}
});
failedQueue = [];
};
client.interceptors.request.use(
async config => {
const access = localStorage.getItem("AccessToken");
if (access) {
config.headers = {
Authorization: `JWT ${access}`
};
}
config.baseURL = await getBaseURL();
return config;
},
error => Promise.reject(error)
);
client.interceptors.response.use(
function(response) {
return response;
},
function(error) {
const originalRequest = error.config;
if (error.response.status === 401 && originalRequest.url === "/refresh/") {
window.location.href = "/login/";
return Promise.reject(error);
}
if (error.response.status === 401 && !originalRequest._retry) {
if (isRefreshing) {
return new Promise(function(resolve, reject) {
failedQueue.push({ resolve, reject });
})
.then(access => {
originalRequest.headers["Authorization"] = "JWT " + access;
return client(originalRequest);
})
.catch(err => {
return Promise.reject(err);
});
}
originalRequest._retry = true;
isRefreshing = true;
const refresh = window.localStorage.getItem("RefreshToken");
const access = window.localStorage.getItem("AccessToken");
return new Promise(function(resolve, reject) {
client
.post("/refresh/", {
refresh,
access
})
.then(({ data }) => {
window.localStorage.setItem("AccessToken", data.access);
window.localStorage.setItem("RefreshToken", data.refresh);
client.defaults.headers.common["Authorization"] =
"JWT " + data.access;
originalRequest.headers["Authorization"] = "JWT " + data.access;
processQueue(null, data.access);
resolve(client(originalRequest));
})
.catch(err => {
processQueue(err, null);
reject(err);
})
.then(() => {
isRefreshing = false;
});
});
}
return Promise.reject(error);
}
);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment