feat: 更新版本至 0.0.56,增强登录缓存功能,添加 token 有效性检查
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@kevisual/api",
|
"name": "@kevisual/api",
|
||||||
"version": "0.0.55",
|
"version": "0.0.56",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "mod.ts",
|
"main": "mod.ts",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -82,7 +82,8 @@ export type CacheStore<T extends Cache = Cache> = {
|
|||||||
getValue(): Promise<CacheLogin>;
|
getValue(): Promise<CacheLogin>;
|
||||||
setValue(value: CacheLogin): Promise<CacheLogin>;
|
setValue(value: CacheLogin): Promise<CacheLogin>;
|
||||||
delValue(): Promise<void>;
|
delValue(): Promise<void>;
|
||||||
init(): Promise<any>;
|
init(): Promise<CacheLogin>;
|
||||||
|
getIsExpired(): Promise<boolean>;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type LoginCacheStoreOpts<T extends Cache = Cache> = {
|
export type LoginCacheStoreOpts<T extends Cache = Cache> = {
|
||||||
@@ -124,6 +125,13 @@ export class LoginCacheStore<T extends Cache = Cache> implements CacheStore<T> {
|
|||||||
*/
|
*/
|
||||||
async delValue() {
|
async delValue() {
|
||||||
await this.cache.del();
|
await this.cache.del();
|
||||||
|
this.cacheData = {
|
||||||
|
loginUsers: [],
|
||||||
|
user: undefined,
|
||||||
|
id: undefined,
|
||||||
|
accessToken: undefined,
|
||||||
|
refreshToken: undefined,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
getValue(): Promise<CacheLogin> {
|
getValue(): Promise<CacheLogin> {
|
||||||
return this.cache.get(this.name);
|
return this.cache.get(this.name);
|
||||||
@@ -132,12 +140,14 @@ export class LoginCacheStore<T extends Cache = Cache> implements CacheStore<T> {
|
|||||||
* 初始化,设置默认值
|
* 初始化,设置默认值
|
||||||
*/
|
*/
|
||||||
async init() {
|
async init() {
|
||||||
const defaultData = {
|
const defaultData: CacheLogin = {
|
||||||
loginUsers: [],
|
loginUsers: [],
|
||||||
user: null,
|
user: undefined,
|
||||||
id: null,
|
id: undefined,
|
||||||
accessToken: null,
|
accessToken: undefined,
|
||||||
refreshToken: null,
|
refreshToken: undefined,
|
||||||
|
accessTokenExpiresIn: undefined,
|
||||||
|
createdAt: undefined,
|
||||||
};
|
};
|
||||||
if (this.cache.init) {
|
if (this.cache.init) {
|
||||||
try {
|
try {
|
||||||
@@ -149,6 +159,7 @@ export class LoginCacheStore<T extends Cache = Cache> implements CacheStore<T> {
|
|||||||
} else {
|
} else {
|
||||||
this.cacheData = (await this.getValue()) || defaultData;
|
this.cacheData = (await this.getValue()) || defaultData;
|
||||||
}
|
}
|
||||||
|
return this.cacheData;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* 设置当前用户
|
* 设置当前用户
|
||||||
@@ -184,6 +195,18 @@ export class LoginCacheStore<T extends Cache = Cache> implements CacheStore<T> {
|
|||||||
const cacheData = this.cacheData;
|
const cacheData = this.cacheData;
|
||||||
return Promise.resolve(cacheData.accessToken || '');
|
return Promise.resolve(cacheData.accessToken || '');
|
||||||
}
|
}
|
||||||
|
getIsExpired(): Promise<boolean> {
|
||||||
|
const cacheData = this.cacheData;
|
||||||
|
if (!cacheData.accessToken) {
|
||||||
|
return Promise.resolve(true);
|
||||||
|
}
|
||||||
|
if (!cacheData.createdAt || !cacheData.accessTokenExpiresIn) {
|
||||||
|
return Promise.resolve(false);
|
||||||
|
}
|
||||||
|
const now = Date.now();
|
||||||
|
const expiresIn = cacheData.createdAt + cacheData.accessTokenExpiresIn * 1000;
|
||||||
|
return Promise.resolve(now >= expiresIn);
|
||||||
|
}
|
||||||
|
|
||||||
async clearCurrentUser() {
|
async clearCurrentUser() {
|
||||||
const user = await this.getCurrentUser();
|
const user = await this.getCurrentUser();
|
||||||
@@ -195,6 +218,8 @@ export class LoginCacheStore<T extends Cache = Cache> implements CacheStore<T> {
|
|||||||
this.cacheData.id = undefined;
|
this.cacheData.id = undefined;
|
||||||
this.cacheData.accessToken = undefined;
|
this.cacheData.accessToken = undefined;
|
||||||
this.cacheData.refreshToken = undefined;
|
this.cacheData.refreshToken = undefined;
|
||||||
|
this.cacheData.accessTokenExpiresIn = undefined;
|
||||||
|
this.cacheData.createdAt = undefined;
|
||||||
await this.setValue(this.cacheData);
|
await this.setValue(this.cacheData);
|
||||||
}
|
}
|
||||||
async clearAll() {
|
async clearAll() {
|
||||||
@@ -203,6 +228,8 @@ export class LoginCacheStore<T extends Cache = Cache> implements CacheStore<T> {
|
|||||||
this.cacheData.id = undefined;
|
this.cacheData.id = undefined;
|
||||||
this.cacheData.accessToken = undefined;
|
this.cacheData.accessToken = undefined;
|
||||||
this.cacheData.refreshToken = undefined;
|
this.cacheData.refreshToken = undefined;
|
||||||
|
this.cacheData.accessTokenExpiresIn = undefined;
|
||||||
|
this.cacheData.createdAt = undefined;
|
||||||
await this.setValue(this.cacheData);
|
await this.setValue(this.cacheData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -305,6 +305,9 @@ export class QueryLogin<T extends Cache = Cache> extends BaseQuery {
|
|||||||
const token = this.storage.getItem('token');
|
const token = this.storage.getItem('token');
|
||||||
return !!token;
|
return !!token;
|
||||||
}
|
}
|
||||||
|
async checkTokenValid() {
|
||||||
|
return this.cacheStore.getIsExpired();
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* 检查本地用户列表
|
* 检查本地用户列表
|
||||||
* @returns
|
* @returns
|
||||||
@@ -313,6 +316,7 @@ export class QueryLogin<T extends Cache = Cache> extends BaseQuery {
|
|||||||
const token = this.storage.getItem('token');
|
const token = this.storage.getItem('token');
|
||||||
return token || '';
|
return token || '';
|
||||||
}
|
}
|
||||||
|
|
||||||
async beforeRequest(opts: any = {}) {
|
async beforeRequest(opts: any = {}) {
|
||||||
const token = this.storage.getItem('token');
|
const token = this.storage.getItem('token');
|
||||||
if (token) {
|
if (token) {
|
||||||
|
|||||||
Reference in New Issue
Block a user