storge有1天過期

This commit is contained in:
owenchen committed 2026-10-07 09:05:52 +08:00
1 parent be496ab375
commit 74757f9eb4
1 file changed
+27 -7
+27 -7
View File
@@ -23,17 +23,37 @@ export const useLoginProfileStore = defineStore("loginProfile", {
actions: { actions: {
updateLoginProfile(loginProfile: LoginProfile) { updateLoginProfile(loginProfile: LoginProfile) {
this.loginProfile = loginProfile; this.loginProfile = loginProfile;
storage.set(JWT_STORAGE_ID, "Bearer " + loginProfile.Token.AccessToken); // 令牌与用户档案用 expire:null 存储(不做过期)。
storage.set(JWT_REFRESHKEY_STORAGE_ID, loginProfile.Token.RefreshToken); // storage 默认只缓存 1 天:第二天再打开时 getToken()/getJwtInfo()
storage.set(LOGIN_PROFILE_STORAGE_ID, JSON.stringify(this.loginProfile)); // 会因过期直接返回 null 并删除条目,本地既没有 AccessToken 也没有
// RefreshToken,401 拦截器无处续期、路由守卫直接跳登录页——
// 而 RefreshToken 在后端有 60 天有效期,本可自动刷新续期。
// 是否失效交给后端判定:刷新失败时 request.ts 会 clearStorage() 收尾。
storage.set(
JWT_STORAGE_ID,
"Bearer " + loginProfile.Token.AccessToken,
null,
);
storage.set(
JWT_REFRESHKEY_STORAGE_ID,
loginProfile.Token.RefreshToken,
null,
);
storage.set(
LOGIN_PROFILE_STORAGE_ID,
JSON.stringify(this.loginProfile),
null,
);
}, },
updateToken(token: string) { updateToken(token: string) {
this.loginProfile.Token.AccessToken = token; this.loginProfile.Token.AccessToken = token;
storage.set(JWT_STORAGE_ID, token); storage.set(JWT_STORAGE_ID, token, null);
}, },
updateJwtInfo(jwtInfo: JwtInfo) { updateJwtInfo(jwtInfo: JwtInfo) {
storage.set(JWT_STORAGE_ID, "Bearer " + jwtInfo.AccessToken); // 同 updateLoginProfile:刷新得到的新令牌同样不设本地过期时间,
storage.set(JWT_REFRESHKEY_STORAGE_ID, jwtInfo.RefreshToken); // 否则续期后的令牌过一天又会被本地缓存过期删除。
storage.set(JWT_STORAGE_ID, "Bearer " + jwtInfo.AccessToken, null);
storage.set(JWT_REFRESHKEY_STORAGE_ID, jwtInfo.RefreshToken, null);
// 只改令牌,用户信息与权限清单必须沿用缓存里的原值。 // 只改令牌,用户信息与权限清单必须沿用缓存里的原值。
// pinia 不做持久化(刷新页面后 state 会重置成 new LoginProfile()), // pinia 不做持久化(刷新页面后 state 会重置成 new LoginProfile()),
@@ -52,7 +72,7 @@ export const useLoginProfileStore = defineStore("loginProfile", {
profile.Token.AccessToken = jwtInfo.AccessToken; profile.Token.AccessToken = jwtInfo.AccessToken;
profile.Token.RefreshToken = jwtInfo.RefreshToken; profile.Token.RefreshToken = jwtInfo.RefreshToken;
profile.Token.CreatedTime = jwtInfo.CreatedTime; profile.Token.CreatedTime = jwtInfo.CreatedTime;
storage.set(LOGIN_PROFILE_STORAGE_ID, JSON.stringify(profile)); storage.set(LOGIN_PROFILE_STORAGE_ID, JSON.stringify(profile), null);
} }
// 同步回内存:同页面后续读取(如 updateToken)才拿得到新令牌 // 同步回内存:同页面后续读取(如 updateToken)才拿得到新令牌