我想在发送正确的请求之前刷新令牌,但我的 react 应用程序在 2 个视图中发送 1-5 个请求时遇到问题。通过这种方式,我发送了 2-5 个请求来刷新令牌。
如何在收到刷新响应之前停止所有请求?
我的代码:
axios.interceptors.request.use(config => {
const decoded = decodeJWT(window.localStorage.getItem("jwt"));
if (decoded && Date.now() >= decoded.exp * 1000) {
return axiosInstance
.post("auth/jwt/refresh/", {
refresh: window.localStorage.getItem("refresh")
})
.then(response => {
window.localStorage.setItem("jwt", response.data.access);
config.headers.Authorization = `JWT ${response.data.access}`;
return config;
})
.catch(err => {
window.localStorage.removeItem("jwt");
return config;
});
} else {
return config;
}
});
您需要使用锁定。对于浏览器来说,这很棘手,因为您还需要注意跨选项卡锁定。看看我为锁定浏览器而编写的这个库:https://www.npmjs.com/package/browser-tabs-lock
如果你想知道如何使用它,你可以看看一个名为SuperTokens的库如何同步调用以刷新API:https://github.com/supertokens/supertokens-website/blob/master/handleSessionExp.ts(第18-55行在锁内(。
希望这有帮助