add:log
This commit is contained in:
@@ -44,9 +44,12 @@ function isAuthExpiredCode(code: number, statusCode?: number): boolean {
|
||||
// 登录失效后的收尾:非关键请求只 reject,不动登录态
|
||||
function failAuth(code: number, msg: string, silentAuth: boolean, showError: boolean) {
|
||||
if (!silentAuth) {
|
||||
console.log('[auth] failAuth 清理登录态并跳转登录页, code=', code, 'msg=', msg)
|
||||
auth.clearTokens()
|
||||
handleAuthExpired()
|
||||
if (showError) showToast('登录已过期,请重新登录')
|
||||
} else {
|
||||
console.log('[auth] failAuth 静默失败(不动登录态), code=', code)
|
||||
}
|
||||
return new ApiError(code, msg || '登录已过期')
|
||||
}
|
||||
@@ -66,9 +69,11 @@ function doRefresh(): Promise<boolean> {
|
||||
const refreshToken = auth.getRefreshToken()
|
||||
const accessToken = auth.getAccessToken()
|
||||
if (!refreshToken || !accessToken) {
|
||||
console.log('[auth] doRefresh 无 token,放弃刷新')
|
||||
resolve(false)
|
||||
return
|
||||
}
|
||||
console.log('[auth] doRefresh 发起刷新')
|
||||
wx.request({
|
||||
url: `${BASE_URL}${API_PREFIX}/user/refresh-token`,
|
||||
method: 'POST',
|
||||
@@ -83,12 +88,17 @@ function doRefresh(): Promise<boolean> {
|
||||
refreshToken: body.data.refresh_token,
|
||||
expireTime: body.data.expire_time,
|
||||
})
|
||||
console.log('[auth] doRefresh 成功')
|
||||
resolve(true)
|
||||
} else {
|
||||
console.log('[auth] doRefresh 响应异常, code=', body && body.code)
|
||||
resolve(false)
|
||||
}
|
||||
},
|
||||
fail: () => resolve(false),
|
||||
fail: () => {
|
||||
console.log('[auth] doRefresh 网络失败')
|
||||
resolve(false)
|
||||
},
|
||||
})
|
||||
}).finally(() => {
|
||||
refreshingPromise = null
|
||||
@@ -116,11 +126,18 @@ let redirecting = false
|
||||
* 2. 当前已在登录页时不重复跳转。
|
||||
*/
|
||||
export function redirectToLogin(): void {
|
||||
if (redirecting) return
|
||||
if (redirecting) {
|
||||
console.log('[auth] redirectToLogin 幂等锁生效,丢弃本次跳转')
|
||||
return
|
||||
}
|
||||
const pages = typeof getCurrentPages === 'function' ? getCurrentPages() : []
|
||||
const current = pages[pages.length - 1]
|
||||
if (current && current.route === 'pages/login/login') return
|
||||
if (current && current.route === 'pages/login/login') {
|
||||
console.log('[auth] redirectToLogin 已在登录页,跳过')
|
||||
return
|
||||
}
|
||||
|
||||
console.log('[auth] redirectToLogin 跳转登录页, 当前页=', current && current.route, '栈深=', pages.length)
|
||||
redirecting = true
|
||||
wx.reLaunch({
|
||||
url: '/pages/login/login',
|
||||
@@ -234,15 +251,9 @@ export function request<T = any>(options: RequestOptions): Promise<T> {
|
||||
})
|
||||
}
|
||||
|
||||
// token 已过期:先静默刷新再发请求,省掉一次必然失败的 401 往返
|
||||
// (刷新失败也不直接拒绝:仍发一次,由后端判定,避免网络抖动就把用户踢下线)
|
||||
if (needAuth && auth.isTokenExpired()) {
|
||||
doRefresh().then(() => {
|
||||
doCall()
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
// 直接发请求:由后端 401 判定 token 是否失效,再触发 doRefresh 重试。
|
||||
// 不再做前端「过期预刷新」:expire_time 单位(秒/毫秒/剩余秒数)无法可靠猜测,
|
||||
// 误判会让每次请求都多一次刷新往返,刷新偶发失败时把已登录用户踢回登录页。
|
||||
doCall()
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user