fix(frontend): preserve callback recovery state

This commit is contained in:
IanShaw027
2026-04-22 13:19:41 +08:00
parent 81c827ee51
commit 6696e61c7b
10 changed files with 229 additions and 23 deletions

View File

@@ -78,7 +78,7 @@ function simulateGuard(
return authState.isAdmin ? '/admin/dashboard' : '/dashboard'
}
if (authState.backendModeEnabled && !authState.isAuthenticated) {
const allowed = ['/login', '/key-usage', '/setup']
const allowed = ['/login', '/key-usage', '/setup', '/payment/result']
const callbackPaths = [
'/auth/callback',
'/auth/linuxdo/callback',
@@ -127,7 +127,7 @@ function simulateGuard(
if (authState.isAuthenticated && authState.isAdmin) {
return null
}
const allowed = ['/login', '/key-usage', '/setup']
const allowed = ['/login', '/key-usage', '/setup', '/payment/result']
const callbackPaths = [
'/auth/callback',
'/auth/linuxdo/callback',
@@ -462,6 +462,18 @@ describe('路由守卫逻辑', () => {
expect(redirect).toBeNull()
})
it('unauthenticated: /payment/result is allowed', () => {
const authState: MockAuthState = {
isAuthenticated: false,
isAdmin: false,
isSimpleMode: false,
backendModeEnabled: true,
hasPendingAuthSession: false,
}
const redirect = simulateGuard('/payment/result', { requiresAuth: false }, authState)
expect(redirect).toBeNull()
})
it('unauthenticated: /register is allowed when a pending auth session exists', () => {
const authState: MockAuthState = {
isAuthenticated: false,

View File

@@ -542,7 +542,7 @@ let authInitialized = false
const navigationLoading = useNavigationLoadingState()
// 延迟初始化预加载,传入 router 实例
let routePrefetch: ReturnType<typeof useRoutePrefetch> | null = null
const BACKEND_MODE_ALLOWED_PATHS = ['/login', '/key-usage', '/setup']
const BACKEND_MODE_ALLOWED_PATHS = ['/login', '/key-usage', '/setup', '/payment/result']
const BACKEND_MODE_CALLBACK_PATHS = [
'/auth/callback',
'/auth/linuxdo/callback',