test: harden overseas pda token session
This commit is contained in:
+1
-1
@@ -1,4 +1,4 @@
|
||||
import { API_ROOT } from '@/config/runtime.js'
|
||||
import { API_ROOT } from '../config/runtime.js'
|
||||
|
||||
function authRequest(path, data) {
|
||||
return new Promise((resolve, reject) => {
|
||||
|
||||
+24
-10
@@ -1,5 +1,5 @@
|
||||
import { refresh } from '@/api/auth.js'
|
||||
import { session, replaceTokens } from '@/stores/session.js'
|
||||
import { refresh } from './auth.js'
|
||||
import { session, replaceTokens, signOut } from '../stores/session.js'
|
||||
|
||||
let refreshPromise = null
|
||||
|
||||
@@ -22,14 +22,24 @@ function successful(response, body) {
|
||||
}
|
||||
|
||||
async function refreshOverseasToken() {
|
||||
if (!session.refreshToken) throw new Error('登录状态已过期,请重新登录')
|
||||
if (!session.refreshToken) {
|
||||
signOut()
|
||||
throw new Error('登录状态已过期,请重新登录')
|
||||
}
|
||||
if (!refreshPromise) {
|
||||
refreshPromise = refresh(session.refreshToken).then((tokens) => { replaceTokens(tokens); return session.token })
|
||||
refreshPromise = refresh(session.refreshToken)
|
||||
.then((tokens) => { replaceTokens(tokens); return session.token })
|
||||
.catch((error) => { signOut(); throw error })
|
||||
.finally(() => { refreshPromise = null })
|
||||
}
|
||||
return refreshPromise
|
||||
}
|
||||
|
||||
async function tokenAfterUnauthorized(failedToken) {
|
||||
if (session.token && session.token !== failedToken) return session.token
|
||||
return refreshOverseasToken()
|
||||
}
|
||||
|
||||
function rawRequest(method, path, data, token) {
|
||||
return new Promise((resolve, reject) => {
|
||||
uni.request({
|
||||
@@ -44,10 +54,11 @@ function rawRequest(method, path, data, token) {
|
||||
}
|
||||
|
||||
export async function overseasRequest(method, path, data, retry = true) {
|
||||
let response = await rawRequest(method, path, data, session.token)
|
||||
const attemptedToken = session.token
|
||||
let response = await rawRequest(method, path, data, attemptedToken)
|
||||
if (retry && unauthorized(response)) {
|
||||
await refreshOverseasToken()
|
||||
response = await rawRequest(method, path, data, session.token)
|
||||
const replacementToken = await tokenAfterUnauthorized(attemptedToken)
|
||||
response = await rawRequest(method, path, data, replacementToken)
|
||||
}
|
||||
const body = response?.data || {}
|
||||
if (!successful(response, body)) throw errorFrom(response, '海外作业请求失败')
|
||||
@@ -68,14 +79,17 @@ function rawUpload(path, filePath, name, token) {
|
||||
}
|
||||
|
||||
export async function overseasUpload(path, filePath, name = 'file', retry = true) {
|
||||
let response = await rawUpload(path, filePath, name, session.token)
|
||||
const attemptedToken = session.token
|
||||
let response = await rawUpload(path, filePath, name, attemptedToken)
|
||||
let body = null
|
||||
try { body = JSON.parse(response.data || '{}') } catch (_) { /* handled below */ }
|
||||
if (retry && unauthorized({ ...response, data: body })) {
|
||||
await refreshOverseasToken()
|
||||
response = await rawUpload(path, filePath, name, session.token)
|
||||
const replacementToken = await tokenAfterUnauthorized(attemptedToken)
|
||||
response = await rawUpload(path, filePath, name, replacementToken)
|
||||
try { body = JSON.parse(response.data || '{}') } catch (_) { body = null }
|
||||
}
|
||||
if (!successful(response, body)) throw errorFrom({ ...response, data: body }, '卸柜照片上传失败')
|
||||
return body.data
|
||||
}
|
||||
|
||||
export function resetOverseasRequestStateForTest() { refreshPromise = null }
|
||||
|
||||
Reference in New Issue
Block a user