From ad8e1fd2c23a96ad4645dacf428f2e245198bf50 Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Sat, 19 Sep 2026 22:54:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/auth/auth.test.ts | 20 ++++---------------- src/core/auth/auth.ts | 14 +++++--------- 2 files changed, 9 insertions(+), 25 deletions(-) diff --git a/src/core/auth/auth.test.ts b/src/core/auth/auth.test.ts index ee88a86c..a1ae3425 100644 --- a/src/core/auth/auth.test.ts +++ b/src/core/auth/auth.test.ts @@ -184,29 +184,17 @@ describe('admin auth session', () => { expect(auth.isAuthenticated).toBe(true) }) - it('refreshes a valid persisted session so newly granted permissions appear after reload', async () => { + it('reuses a valid persisted session without blocking reload on refresh', async () => { localStorage.setItem('cc-admin-token', token()) localStorage.setItem('cc-admin-refresh-token', 'refresh-old') localStorage.setItem('cc-admin-permission-codes', '["platform:warehouse:list"]') - const refreshedToken = token({ - token_version: 2, - }) - mocks.post.mockResolvedValue(loginResponse(refreshedToken, 'refresh-rotated')) - mocks.listCurrentPlatformPermissionCodes.mockResolvedValue([ - 'platform:warehouse:list', - 'platform:firstleg:inbound:list', - ]) const auth = useAuthStore() await expect(auth.restoreSession()).resolves.toBe(true) - expect(mocks.post).toHaveBeenCalledWith('/auth/refresh', { refreshToken: 'refresh-old' }) - expect([...auth.permissionCodes]).toEqual([ - 'platform:warehouse:list', - 'platform:firstleg:inbound:list', - ]) - expect(localStorage.getItem('cc-admin-permission-codes')) - .toBe('["platform:warehouse:list","platform:firstleg:inbound:list"]') + expect(mocks.post).not.toHaveBeenCalled() + expect([...auth.permissionCodes]).toEqual(['platform:warehouse:list']) + expect(localStorage.getItem('cc-admin-permission-codes')).toBe('["platform:warehouse:list"]') }) it('reuses a session rotated by another tab without refreshing it again', async () => { diff --git a/src/core/auth/auth.ts b/src/core/auth/auth.ts index 6d995ae4..56510cd7 100644 --- a/src/core/auth/auth.ts +++ b/src/core/auth/auth.ts @@ -224,15 +224,11 @@ export const useAuthStore = defineStore('admin-auth', () => { } async function restoreSession() { - if (isAuthenticated.value) { - if (!refreshToken.value) return true - try { - await refreshSession() - return true - } catch { - return false - } - } + // The constructor has already validated a persisted access token. Reusing + // a still-valid token lets the app mount immediately; refresh only remains + // necessary after the access token has expired and the constructor has + // retained the persisted refresh token for recovery. + if (isAuthenticated.value) return true if (!refreshToken.value) return false try { await refreshSession()