fix(pda): revoke expired sessions before completing logout

This commit is contained in:
2026-10-05 13:41:34 +08:00
parent 7aebbd2a70
commit e699e9d9ba
8 changed files with 192 additions and 18 deletions
+11 -2
View File
@@ -10,9 +10,10 @@ function authRequest(path, data, options = {}) {
timeout: options.timeout || 15000,
success(response) {
const body = response.data || {}
if (String(body.code ?? response.statusCode) !== '200') {
if (response.statusCode !== 200 || String(body.code ?? response.statusCode) !== '200') {
const error = new Error(body.message || '认证服务请求失败')
error.code = body.code || response.statusCode
error.statusCode = response.statusCode
error.requestId = body.requestId || response.header?.['X-Request-Id'] || response.header?.['x-request-id']
error.traceId = body.traceId || response.header?.['X-Trace-Id'] || response.header?.['x-trace-id']
reject(error)
@@ -33,9 +34,17 @@ export function login(loginId, password) {
return authRequest('/auth/login', { loginId, password })
}
const pendingRefreshes = new Map()
export function refresh(refreshToken) {
return authRequest('/auth/refresh', { refreshToken })
if (pendingRefreshes.has(refreshToken)) return pendingRefreshes.get(refreshToken)
const pending = authRequest('/auth/refresh', { refreshToken }).finally(() => {
if (pendingRefreshes.get(refreshToken) === pending) pendingRefreshes.delete(refreshToken)
})
pendingRefreshes.set(refreshToken, pending)
return pending
}
export function getPendingRefresh(refreshToken) { return pendingRefreshes.get(refreshToken) || null }
export function logout(refreshToken, accessToken) {
return authRequest('/auth/logout', { refreshToken }, {