fix: sync frontend token from server session
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user