优化
This commit is contained in:
+14
-4
@@ -21,16 +21,26 @@ const REFRESH_LOCK_NAME = 'cc-admin-auth-refresh'
|
||||
interface LoginResponse {
|
||||
tokenType: string
|
||||
accessToken: string
|
||||
expiresIn: number
|
||||
expiresIn: number | string
|
||||
refreshToken: string
|
||||
refreshExpiresIn: number
|
||||
refreshExpiresIn: number | string
|
||||
overseasAccessToken?: string | null
|
||||
overseasExpiresIn?: number
|
||||
overseasExpiresIn?: number | string
|
||||
}
|
||||
|
||||
class ExpiredAccessTokenError extends Error {}
|
||||
class SupersededSessionError extends Error {}
|
||||
|
||||
function parseLifetimeSeconds(value: number | string, field: string) {
|
||||
const normalized = typeof value === 'number'
|
||||
? value
|
||||
: /^\d+$/.test(value.trim()) ? Number(value) : Number.NaN
|
||||
if (!Number.isSafeInteger(normalized) || normalized < 0) {
|
||||
throw new Error(`登录响应中的 ${field} 格式无效`)
|
||||
}
|
||||
return normalized
|
||||
}
|
||||
|
||||
function sessionFromToken(token: string) {
|
||||
const claims = decodeJwtClaims(token)
|
||||
if (claims.app_code !== 'PLATFORM') throw new Error('账号不属于当前应用端')
|
||||
@@ -92,7 +102,7 @@ export const useAuthStore = defineStore('admin-auth', () => {
|
||||
ensureCurrentGeneration(expectedGeneration)
|
||||
replaceOverseasAccessToken(
|
||||
result.overseasAccessToken ?? null,
|
||||
result.overseasExpiresIn ?? 0,
|
||||
parseLifetimeSeconds(result.overseasExpiresIn ?? 0, 'overseasExpiresIn'),
|
||||
)
|
||||
token.value = result.accessToken
|
||||
refreshToken.value = result.refreshToken
|
||||
|
||||
Reference in New Issue
Block a user