feat: 更新版本至 0.0.49,新增 storeList 支持,优化登录缓存,添加 store-auth 和 store-mark 功能

This commit is contained in:
2026-02-14 03:06:16 +08:00
parent d2ffc8d8ec
commit 05c8496469
9 changed files with 360 additions and 26 deletions

View File

@@ -31,6 +31,8 @@ export type CacheLoginUser = {
id?: string;
accessToken?: string;
refreshToken?: string;
accessTokenExpiresIn?: number;
createdAt?: number;
};
type CacheLogin = {
loginUsers: CacheLoginUser[];
@@ -162,6 +164,8 @@ export class LoginCacheStore implements CacheStore<any> {
this.cacheData.id = user.id;
this.cacheData.accessToken = user.accessToken;
this.cacheData.refreshToken = user.refreshToken;
this.cacheData.accessTokenExpiresIn = user.accessTokenExpiresIn;
this.cacheData.createdAt = user.createdAt;
await this.setValue(this.cacheData);
}

View File

@@ -39,7 +39,7 @@ export class QueryLogin extends BaseQuery {
this.isBrowser = opts?.isBrowser ?? true;
this.init();
this.onLoad = opts?.onLoad;
this.storage = opts?.storage || localStorage;
this.storage = opts?.storage || globalThis?.localStorage;
}
setQuery(query: Query) {
this.query = query;
@@ -67,9 +67,9 @@ export class QueryLogin extends BaseQuery {
async login(data: QueryLoginData) {
const res = await this.post<QueryLoginResult>({ key: 'login', ...data });
if (res.code === 200) {
const { accessToken, refreshToken } = res?.data || {};
const { accessToken, refreshToken, accessTokenExpiresIn } = res?.data || {};
this.storage.setItem('token', accessToken || '');
await this.beforeSetLoginUser({ accessToken, refreshToken });
await this.beforeSetLoginUser({ accessToken, refreshToken, accessTokenExpiresIn });
}
return res;
}
@@ -81,9 +81,9 @@ export class QueryLogin extends BaseQuery {
async loginByCode(data: { phone: string; code: string }) {
const res = await this.post<QueryLoginResult>({ path: 'sms', key: 'login', data });
if (res.code === 200) {
const { accessToken, refreshToken } = res?.data || {};
const { accessToken, refreshToken, accessTokenExpiresIn } = res?.data || {};
this.storage.setItem('token', accessToken || '');
await this.beforeSetLoginUser({ accessToken, refreshToken });
await this.beforeSetLoginUser({ accessToken, refreshToken, accessTokenExpiresIn });
}
return res;
}
@@ -91,17 +91,17 @@ export class QueryLogin extends BaseQuery {
* 设置token
* @param token
*/
async setLoginToken(token: { accessToken: string; refreshToken: string }) {
const { accessToken, refreshToken } = token;
async setLoginToken(token: { accessToken: string; refreshToken: string; accessTokenExpiresIn?: number }) {
const { accessToken, refreshToken, accessTokenExpiresIn } = token;
this.storage.setItem('token', accessToken || '');
await this.beforeSetLoginUser({ accessToken, refreshToken });
await this.beforeSetLoginUser({ accessToken, refreshToken, accessTokenExpiresIn });
}
async loginByWechat(data: { code: string }) {
const res = await this.post<QueryLoginResult>({ path: 'wx', key: 'open-login', code: data.code });
if (res.code === 200) {
const { accessToken, refreshToken } = res?.data || {};
const { accessToken, refreshToken, accessTokenExpiresIn } = res?.data || {};
this.storage.setItem('token', accessToken || '');
await this.beforeSetLoginUser({ accessToken, refreshToken });
await this.beforeSetLoginUser({ accessToken, refreshToken, accessTokenExpiresIn });
}
return res;
}
@@ -126,7 +126,7 @@ export class QueryLogin extends BaseQuery {
* 登陆成功,需要获取用户信息进行缓存
* @param param0
*/
async beforeSetLoginUser({ accessToken, refreshToken, check401 }: { accessToken?: string; refreshToken?: string; check401?: boolean }) {
async beforeSetLoginUser({ accessToken, refreshToken, check401, accessTokenExpiresIn }: { accessTokenExpiresIn?: number, accessToken?: string; refreshToken?: string; check401?: boolean }) {
if (accessToken && refreshToken) {
const resUser = await this.getMe(accessToken, check401);
if (resUser.code === 200) {
@@ -137,6 +137,8 @@ export class QueryLogin extends BaseQuery {
id: user.id,
accessToken,
refreshToken,
accessTokenExpiresIn,
createdAt: Date.now(),
});
} else {
console.error('登录失败');
@@ -185,9 +187,9 @@ export class QueryLogin extends BaseQuery {
if (hasRefreshToken) {
const res = await that.queryRefreshToken(hasRefreshToken);
if (res.code === 200) {
const { accessToken, refreshToken } = res?.data || {};
const { accessToken, refreshToken, accessTokenExpiresIn } = res?.data || {};
that.storage.setItem('token', accessToken || '');
await that.beforeSetLoginUser({ accessToken, refreshToken, check401: false });
await that.beforeSetLoginUser({ accessToken, refreshToken, accessTokenExpiresIn, check401: false });
if (refetch && ctx && ctx.req && ctx.req.url && ctx.fetch) {
await new Promise((resolve) => setTimeout(resolve, 1500));
const url = ctx.req?.url;
@@ -336,12 +338,17 @@ export class QueryLogin extends BaseQuery {
const user = localUserList.find((userItem) => userItem.user!.username === username);
if (user) {
this.storage.setItem('token', user.accessToken || '');
await this.beforeSetLoginUser({ accessToken: user.accessToken, refreshToken: user.refreshToken });
await this.beforeSetLoginUser({
accessToken: user.accessToken,
refreshToken: user.refreshToken,
accessTokenExpiresIn: user.accessTokenExpiresIn
});
return {
code: 200,
data: {
accessToken: user.accessToken,
refreshToken: user.refreshToken,
accessTokenExpiresIn: user.accessTokenExpiresIn,
},
success: true,
message: '切换用户成功',
@@ -350,9 +357,9 @@ export class QueryLogin extends BaseQuery {
const res = await this.postSwitchUser(username);
if (res.code === 200) {
const { accessToken, refreshToken } = res?.data || {};
const { accessToken, refreshToken, accessTokenExpiresIn } = res?.data || {};
this.storage.setItem('token', accessToken || '');
await this.beforeSetLoginUser({ accessToken, refreshToken });
await this.beforeSetLoginUser({ accessToken, refreshToken, accessTokenExpiresIn });
}
return res;
}
@@ -409,9 +416,9 @@ export class QueryLogin extends BaseQuery {
loginToken: token,
});
if (res.code === 200) {
const accessToken = res.data?.accessToken;
const { accessTokenExpiresIn, accessToken, refreshToken } = res.data;
this.storage.setItem('token', accessToken || '');
await this.beforeSetLoginUser({ accessToken, refreshToken: res.data?.refreshToken });
await this.beforeSetLoginUser({ accessToken, refreshToken, accessTokenExpiresIn });
return res;
}
return false;
@@ -421,7 +428,7 @@ export class QueryLogin extends BaseQuery {
*
*
import MD5 from 'crypto-js/md5.js';
// import MD5 from 'crypto-js/md5.js';
import jsonwebtoken from 'jsonwebtoken';
*/