aaa
This commit is contained in:
+18
-4
@@ -1,9 +1,19 @@
|
||||
import { BASE_URL } from '@/config'
|
||||
import { storage, SESSION_KEY } from '@/utils/storage'
|
||||
import { login as authLogin } from './auth'
|
||||
|
||||
// 是否为 token 失效(HTTP 401 或 body code 401,如 invalid token)
|
||||
function isInvalidToken(res) {
|
||||
if (res.statusCode === 401) return true
|
||||
const body = res.data
|
||||
if (body && body.code === 401) return true
|
||||
return false
|
||||
}
|
||||
|
||||
export const request = {
|
||||
async request(options) {
|
||||
const sessionKey = storage.get(SESSION_KEY)
|
||||
const isRetryAfter401 = options._retryAfter401 === true
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
uni.request({
|
||||
@@ -15,11 +25,15 @@ export const request = {
|
||||
'Authorization': sessionKey ? `Bearer ${sessionKey}` : ''
|
||||
},
|
||||
success: async (res) => {
|
||||
if (res.statusCode === 401) {
|
||||
const { login } = await import('./auth')
|
||||
if (isInvalidToken(res)) {
|
||||
if (isRetryAfter401) {
|
||||
reject(new Error(res.data?.message || 'invalid token'))
|
||||
return
|
||||
}
|
||||
try {
|
||||
await login()
|
||||
resolve(this.request(options))
|
||||
await authLogin()
|
||||
const nextOpts = { ...options, _retryAfter401: true }
|
||||
resolve(this.request(nextOpts))
|
||||
} catch (e) {
|
||||
reject(e)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user