Skip to content
This repository was archived by the owner on Apr 11, 2026. It is now read-only.

Commit 1f9cf41

Browse files
committed
feat: 优化认证错误处理逻辑,尝试刷新令牌后再决定跳转登录页
1 parent cff8cf0 commit 1f9cf41

1 file changed

Lines changed: 18 additions & 14 deletions

File tree

src/axios/axios.js

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -163,16 +163,12 @@ axiosInstance.interceptors.response.use(
163163

164164
const errorCode = getErrorCode(error);
165165

166-
// ZC_ERROR_NEED_LOGOUT: 令牌已失效(过期/吊销/刷新失败等)
167-
// 必须清除本地令牌,跳转登录页
168-
if (errorCode === ZC_ERROR.NEED_LOGOUT) {
169-
handleNeedLogout();
170-
return Promise.reject(error);
171-
}
166+
// ZC_ERROR_NEED_LOGOUT 或 ZC_ERROR_NEED_LOGIN:
167+
// 先尝试刷新令牌,刷新成功则重放请求;仅在刷新失败时才清除登录态并跳转
168+
const needsAuth =
169+
errorCode === ZC_ERROR.NEED_LOGOUT || errorCode === ZC_ERROR.NEED_LOGIN;
172170

173-
// ZC_ERROR_NEED_LOGIN: 未携带令牌
174-
// 先尝试刷新令牌,刷新成功则重放请求;失败则清除登录态并跳转
175-
if (errorCode === ZC_ERROR.NEED_LOGIN && !originalRequest._retryAfterRefresh) {
171+
if (needsAuth && !originalRequest._retryAfterRefresh) {
176172
originalRequest._retryAfterRefresh = true;
177173

178174
try {
@@ -181,15 +177,23 @@ axiosInstance.interceptors.response.use(
181177
originalRequest.headers.Authorization = `Bearer ${newToken}`;
182178
return axiosInstance(originalRequest);
183179
} catch {
184-
// 刷新失败,清除登录态并跳转
185-
handleNeedLogin();
180+
// 刷新令牌失败,清除登录态并跳转
181+
if (errorCode === ZC_ERROR.NEED_LOGOUT) {
182+
handleNeedLogout();
183+
} else {
184+
handleNeedLogin();
185+
}
186186
return Promise.reject(error);
187187
}
188188
}
189189

190-
// 重试过仍然 NEED_LOGIN,直接跳转
191-
if (errorCode === ZC_ERROR.NEED_LOGIN) {
192-
handleNeedLogin();
190+
// 重试过仍然需要认证,直接跳转
191+
if (needsAuth) {
192+
if (errorCode === ZC_ERROR.NEED_LOGOUT) {
193+
handleNeedLogout();
194+
} else {
195+
handleNeedLogin();
196+
}
193197
return Promise.reject(error);
194198
}
195199

0 commit comments

Comments
 (0)