fix: sync frontend token from server session

This commit is contained in:
wren
2026-04-29 18:52:58 +08:00
parent 790b9566e1
commit b31707661b
+13 -5
View File
@@ -31,14 +31,22 @@ export function ClientAuthGuard({ isPublicPath, frontendJWT, userInfo }: ClientA
return;
}
// 优先用服务端 session 回传的数据回填 localStorage,避免刚登录时客户端误判未登录
// 优先用服务端 session 回传的数据同步 localStorage
// 不能只在本地没有 token 时才回填,否则本地残留旧 token 会导致:
// - SSR 页面可打开(服务端 session 是新的)
// - CSR 子页面请求 401(客户端 localStorage 还是旧的)
const token = localStorage.getItem('access_token');
if (!token && frontendJWT) {
if (frontendJWT && token !== frontendJWT) {
localStorage.setItem('access_token', frontendJWT);
if (userInfo) {
localStorage.setItem('user_info', JSON.stringify(userInfo));
console.log('✅ [Auth Guard] 已根据服务端 session 同步最新 access_token');
}
if (userInfo) {
const serializedUserInfo = JSON.stringify(userInfo);
if (localStorage.getItem('user_info') !== serializedUserInfo) {
localStorage.setItem('user_info', serializedUserInfo);
console.log('✅ [Auth Guard] 已根据服务端 session 同步最新 user_info');
}
console.log('✅ [Auth Guard] 已根据服务端 session 回填本地认证数据');
}
const authenticated = isAuthenticated() || !!frontendJWT;