test: harden overseas pda token session

This commit is contained in:
2026-08-25 00:24:57 +08:00
parent bc986f1eef
commit f2b9d48268
8 changed files with 373 additions and 34 deletions
+1 -1
View File
@@ -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
View File
@@ -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 }