feat: 更新版本至 0.0.58,添加 cnb 登录和刷新用户功能
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@kevisual/api",
|
||||
"version": "0.0.57",
|
||||
"version": "0.0.58",
|
||||
"description": "",
|
||||
"main": "mod.ts",
|
||||
"scripts": {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
/**
|
||||
* 检查本地用户列表
|
||||
|
||||
Reference in New Issue
Block a user