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: {
updateLoginProfile(loginProfile: LoginProfile) {
this.loginProfile = loginProfile;
storage.set(JWT_STORAGE_ID, "Bearer " + loginProfile.Token.AccessToken);
storage.set(JWT_REFRESHKEY_STORAGE_ID, loginProfile.Token.RefreshToken);
storage.set(LOGIN_PROFILE_STORAGE_ID, JSON.stringify(this.loginProfile));
// 令牌与用户档案用 expire:null 存储(不做过期)。
// storage 默认只缓存 1 天:第二天再打开时 getToken()/getJwtInfo()
// 会因过期直接返回 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) {
this.loginProfile.Token.AccessToken = token;
storage.set(JWT_STORAGE_ID, token);
storage.set(JWT_STORAGE_ID, token, null);
},
updateJwtInfo(jwtInfo: JwtInfo) {
storage.set(JWT_STORAGE_ID, "Bearer " + jwtInfo.AccessToken);
storage.set(JWT_REFRESHKEY_STORAGE_ID, jwtInfo.RefreshToken);
// 同 updateLoginProfile:刷新得到的新令牌同样不设本地过期时间,
// 否则续期后的令牌过一天又会被本地缓存过期删除。
storage.set(JWT_STORAGE_ID, "Bearer " + jwtInfo.AccessToken, null);
storage.set(JWT_REFRESHKEY_STORAGE_ID, jwtInfo.RefreshToken, null);
// 只改令牌,用户信息与权限清单必须沿用缓存里的原值。
// pinia 不做持久化(刷新页面后 state 会重置成 new LoginProfile()),
@@ -52,7 +72,7 @@ export const useLoginProfileStore = defineStore("loginProfile", {
profile.Token.AccessToken = jwtInfo.AccessToken;
profile.Token.RefreshToken = jwtInfo.RefreshToken;
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)才拿得到新令牌