refactor(auth): 优化401处理逻辑并提取登录跳转函数
将重复的401处理逻辑提取为redirectToLogin函数 修复刷新接口401时的循环重试问题 docs: 更新项目结构文档和快速启动指南
This commit is contained in:
@ -63,11 +63,7 @@ async function tryRefreshAndRetry(original: RetryConfig, message?: string): Prom
|
||||
} catch (e: any) {
|
||||
pendingQueue.forEach(p => p.reject(e))
|
||||
pendingQueue = []
|
||||
clearToken()
|
||||
if (typeof window !== 'undefined' && window.location.pathname !== '/login') {
|
||||
window.location.href = '/login'
|
||||
}
|
||||
return Promise.reject(e)
|
||||
return redirectToLogin((e && e.message) || message)
|
||||
} finally {
|
||||
isRefreshing = false
|
||||
}
|
||||
@ -104,6 +100,10 @@ api.interceptors.response.use(
|
||||
const msg = body?.message || '未登录或登录已过期'
|
||||
return Promise.reject(new Error(msg))
|
||||
}
|
||||
// 刷新接口返回业务 401:直接跳转登录,避免循环重试
|
||||
if (reqUrl.includes('/auth/refresh')) {
|
||||
return redirectToLogin(body?.message)
|
||||
}
|
||||
return tryRefreshAndRetry(original, body?.message)
|
||||
}
|
||||
return r
|
||||
@ -120,6 +120,10 @@ api.interceptors.response.use(
|
||||
const msg = resp?.message || '用户名或密码错误'
|
||||
return Promise.reject(new Error(msg))
|
||||
}
|
||||
// 刷新接口返回 401:直接跳转登录,避免循环重试
|
||||
if (reqUrl.includes('/auth/refresh')) {
|
||||
return redirectToLogin(resp?.message)
|
||||
}
|
||||
|
||||
// 已经重试过了,直接拒绝
|
||||
if (original._retry) {
|
||||
@ -144,14 +148,10 @@ api.interceptors.response.use(
|
||||
pendingQueue = []
|
||||
return api(original)
|
||||
}
|
||||
} catch (e) {
|
||||
} catch (e: any) {
|
||||
pendingQueue.forEach(p => p.reject(e))
|
||||
pendingQueue = []
|
||||
clearToken()
|
||||
if (typeof window !== 'undefined' && window.location.pathname !== '/login') {
|
||||
window.location.href = '/login'
|
||||
}
|
||||
return Promise.reject(e)
|
||||
return redirectToLogin((e && e.message) || resp?.message)
|
||||
} finally {
|
||||
isRefreshing = false
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user