fix(playground): 防止登录回跳死循环

This commit is contained in:
sunlei 2026-05-17 15:57:41 +08:00
parent 49d9eb35e9
commit 0e271980c3
2 changed files with 22 additions and 0 deletions

View File

@ -15,6 +15,8 @@ type PersistedAuth = {
const ACCESS_TOKEN_KEY = 'kt-admin-access-token'
const ACCESS_CODES_KEY = 'kt-admin-access-codes'
const USER_INFO_KEY = 'kt-admin-user-info'
const LOGIN_REDIRECT_MARK_KEY = 'kt-admin-login-redirect-at'
const LOGIN_REDIRECT_COOLDOWN = 10 * 1000
let refreshPromise: Promise<string | null> | null = null
let redirectingToAdminLogin = false
@ -46,6 +48,21 @@ export function clearPersistedAuth() {
window.localStorage.removeItem(USER_INFO_KEY)
}
export function clearAdminLoginRedirectMark() {
window.sessionStorage.removeItem(LOGIN_REDIRECT_MARK_KEY)
}
export function shouldSkipRepeatedAdminLoginRedirect() {
const redirectAt = Number(
window.sessionStorage.getItem(LOGIN_REDIRECT_MARK_KEY),
)
return (
Number.isFinite(redirectAt) &&
Date.now() - redirectAt < LOGIN_REDIRECT_COOLDOWN
)
}
export function persistAuthData({
accessCodes,
accessToken,
@ -80,6 +97,7 @@ export function redirectToAdminLogin() {
if (redirectingToAdminLogin) return
redirectingToAdminLogin = true
window.sessionStorage.setItem(LOGIN_REDIRECT_MARK_KEY, String(Date.now()))
window.location.href = buildAdminLoginUrl(window.location.href)
}

View File

@ -1,9 +1,11 @@
import axios, { type AxiosRequestConfig } from 'axios'
import {
clearAdminLoginRedirectMark,
clearPersistedAuth,
getStoredAccessToken,
redirectToAdminLogin,
refreshPersistedAuth,
shouldSkipRepeatedAdminLoginRedirect,
} from './auth'
export type ApiResponse<T = unknown> = {
@ -85,6 +87,7 @@ async function retryRequestWithFreshToken(config?: AuthRetryConfig) {
function redirectAfterAuthExpired() {
clearPersistedAuth()
if (shouldSkipRepeatedAdminLoginRedirect()) return
redirectToAdminLogin()
}
@ -106,6 +109,7 @@ request.interceptors.response.use(
return Promise.reject(new Error(data.msg || '请求失败'))
}
clearAdminLoginRedirectMark()
return data.data as any
},
async (error) => {