feat: 更新版本至 0.0.58,添加 cnb 登录和刷新用户功能

This commit is contained in:
2026-02-21 22:19:19 +08:00
parent 3f8b9c2c4a
commit 2a0d508cf4
2 changed files with 51 additions and 4 deletions

View File

@@ -1,6 +1,6 @@
{
"name": "@kevisual/api",
"version": "0.0.57",
"version": "0.0.58",
"description": "",
"main": "mod.ts",
"scripts": {

View File

@@ -107,6 +107,26 @@ export class QueryLogin<T extends Cache = Cache> extends BaseQuery {
}
return res;
}
/**
* cnb登录 适用于cnb的登录方式 需要后端配合, 传入cnbToken 后端验证cnbToken的有效性并返回accessToken和refreshToken
* @param data
* @returns
*/
async loginByCnb(data: { cnbToken: string }) {
const res = await this.post<QueryLoginResult>({
path: 'user',
key: 'cnb-login',
payload: {
data: data
}
});
if (res.code === 200) {
const { accessToken, refreshToken, accessTokenExpiresIn } = res?.data || {};
this.storage.setItem('token', accessToken || '');
await this.beforeSetLoginUser({ accessToken, refreshToken, accessTokenExpiresIn });
}
return res;
}
/**
* 检测微信登录登陆成功后调用onSuccess否则调用onError
* @param param0
@@ -154,13 +174,27 @@ export class QueryLogin<T extends Cache = Cache> extends BaseQuery {
message: '登录失败',
};
}
/**
* 刷新登录用户获取新的token并更新用户信息
* @param refreshToken 刷新token如果不传则从缓存中获取
* @returns
*/
async refreshLoginUser(refreshToken?: string) {
const res = await this.queryRefreshToken(refreshToken);
if (res.code === 200) {
const { accessToken, refreshToken, accessTokenExpiresIn } = res?.data || {};
this.storage.setItem('token', accessToken || '');
await this.beforeSetLoginUser({ accessToken, refreshToken, accessTokenExpiresIn, check401: false });
}
return res;
}
/**
* 刷新token
* @param refreshToken
* @returns
*/
async queryRefreshToken(refreshToken?: string) {
const _refreshToken = refreshToken || this.cacheStore.getRefreshToken();
const _refreshToken = refreshToken || (await this.cacheStore.getRefreshToken());
let data = { refreshToken: _refreshToken };
if (!_refreshToken) {
await this.cacheStore.clearCurrentUser();
@@ -311,8 +345,21 @@ export class QueryLogin<T extends Cache = Cache> extends BaseQuery {
const token = this.storage.getItem('token');
return !!token;
}
async checkTokenValid() {
return this.cacheStore.getIsExpired();
async checkTokenValid(): Promise<null | string> {
const token = this.storage.getItem('token');
if (!token) {
return null;
}
const isExpired = await this.cacheStore.getIsExpired();
if (isExpired) {
const res = await this.refreshLoginUser()
if (res.code === 200) {
// 刷新成功返回新的token
return res.data?.accessToken || null;
}
return null;
}
return token;
}
/**
* 检查本地用户列表