Skip to content

Commit 506359e

Browse files
committed
refine
1 parent 03a63b9 commit 506359e

1 file changed

Lines changed: 30 additions & 23 deletions

File tree

src/lib/helpers/http.js

Lines changed: 30 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,12 @@ axios.interceptors.response.use(
5050
},
5151
(error) => {
5252
loaderStore.set(false);
53-
const originalRequest = error?.config;
53+
const originalRequest = error?.config || {};
54+
const user = getUserStore();
5455

5556
// If token expired or 401 returned, attempt a single token refresh and retry requests in queue.
56-
if ((error?.response?.status === 401 || isTokenExired()) && originalRequest) {
57+
if ((error?.response?.status === 401 || isTokenExired(user.expires)) && originalRequest && !originalRequest._retried) {
58+
originalRequest._retried = true;
5759
return new Promise((resolve, reject) => {
5860
enqueue({ config: originalRequest, resolve, reject });
5961
});
@@ -78,26 +80,29 @@ function enqueue(retryItem) {
7880

7981
// Start refresh token
8082
if (!isRefreshingToken) {
81-
isRefreshingToken = true;
8283
const user = getUserStore();
83-
84-
refreshAccessToken(user?.token || '')
85-
.then((newToken) => {
86-
isRefreshingToken = false;
87-
const promise = dequeue(newToken);
88-
return promise;
89-
})
90-
.catch((err) => {
91-
isRefreshingToken = false;
92-
// Reject all queued requests
93-
while (retryQueue.length > 0) {
94-
const item = retryQueue.shift();
95-
if (item) {
96-
item.reject(err);
84+
if (!isTokenExired(user.expires)) {
85+
dequeue(user.token);
86+
} else {
87+
isRefreshingToken = true;
88+
refreshAccessToken(user?.token || '')
89+
.then((newToken) => {
90+
isRefreshingToken = false;
91+
const promise = dequeue(newToken);
92+
return promise;
93+
})
94+
.catch((err) => {
95+
isRefreshingToken = false;
96+
// Reject all queued requests
97+
while (retryQueue.length > 0) {
98+
const item = retryQueue.shift();
99+
if (item) {
100+
item.reject(err);
101+
}
97102
}
98-
}
99-
redirectToLogin();
100-
});
103+
redirectToLogin();
104+
});
105+
}
101106
}
102107
}
103108

@@ -122,9 +127,11 @@ function dequeue(newToken) {
122127
return chain;
123128
}
124129

125-
function isTokenExired() {
126-
const user = getUserStore();
127-
return Date.now() / 1000 > user.expires;
130+
/**
131+
* @param {number} expires
132+
*/
133+
function isTokenExired(expires) {
134+
return Date.now() / 1000 > expires;
128135
}
129136

130137
function redirectToLogin() {

0 commit comments

Comments
 (0)