@kevisual/api 0.0.58 → 0.0.60
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/query-login-node.d.ts +8 -2
- package/dist/query-login-node.js +54 -55
- package/dist/query-login.d.ts +8 -2
- package/dist/query-login.js +54 -55
- package/package.json +1 -1
- package/query/query-login/login-cache.ts +44 -45
- package/query/query-login/query-login.ts +15 -6
- package/query/query-login/test/expire.ts +10 -0
|
@@ -172,13 +172,19 @@ declare class QueryLogin<T extends Cache = Cache> extends BaseQuery {
|
|
|
172
172
|
* @param refreshToken 刷新token,如果不传,则从缓存中获取
|
|
173
173
|
* @returns
|
|
174
174
|
*/
|
|
175
|
-
refreshLoginUser(
|
|
175
|
+
refreshLoginUser(opts?: {
|
|
176
|
+
refreshToken?: string;
|
|
177
|
+
accessToken?: string;
|
|
178
|
+
}): Promise<any>;
|
|
176
179
|
/**
|
|
177
180
|
* 刷新token
|
|
178
181
|
* @param refreshToken
|
|
179
182
|
* @returns
|
|
180
183
|
*/
|
|
181
|
-
queryRefreshToken(
|
|
184
|
+
queryRefreshToken(opts?: {
|
|
185
|
+
refreshToken?: string;
|
|
186
|
+
accessToken?: string;
|
|
187
|
+
}): Promise<any>;
|
|
182
188
|
/**
|
|
183
189
|
* 检查401错误,并刷新token, 如果refreshToken存在,则刷新token, 否则返回401
|
|
184
190
|
* 拦截请求,请使用run401Action, 不要直接使用 afterCheck401ToRefreshToken
|
package/dist/query-login-node.js
CHANGED
|
@@ -312,6 +312,16 @@ class BaseQuery {
|
|
|
312
312
|
}
|
|
313
313
|
|
|
314
314
|
// query/query-login/login-cache.ts
|
|
315
|
+
var defaultCacheData = {
|
|
316
|
+
loginUsers: [],
|
|
317
|
+
user: undefined,
|
|
318
|
+
id: undefined,
|
|
319
|
+
accessToken: undefined,
|
|
320
|
+
refreshToken: undefined,
|
|
321
|
+
accessTokenExpiresIn: undefined,
|
|
322
|
+
createdAt: undefined
|
|
323
|
+
};
|
|
324
|
+
|
|
315
325
|
class LoginCacheStore {
|
|
316
326
|
cache;
|
|
317
327
|
name;
|
|
@@ -321,13 +331,7 @@ class LoginCacheStore {
|
|
|
321
331
|
throw new Error("cache is required");
|
|
322
332
|
}
|
|
323
333
|
this.cache = opts.cache;
|
|
324
|
-
this.cacheData = {
|
|
325
|
-
loginUsers: [],
|
|
326
|
-
user: undefined,
|
|
327
|
-
id: undefined,
|
|
328
|
-
accessToken: undefined,
|
|
329
|
-
refreshToken: undefined
|
|
330
|
-
};
|
|
334
|
+
this.cacheData = { ...defaultCacheData };
|
|
331
335
|
this.name = opts.name;
|
|
332
336
|
}
|
|
333
337
|
async setValue(value) {
|
|
@@ -337,27 +341,13 @@ class LoginCacheStore {
|
|
|
337
341
|
}
|
|
338
342
|
async delValue() {
|
|
339
343
|
await this.cache.del();
|
|
340
|
-
this.cacheData = {
|
|
341
|
-
loginUsers: [],
|
|
342
|
-
user: undefined,
|
|
343
|
-
id: undefined,
|
|
344
|
-
accessToken: undefined,
|
|
345
|
-
refreshToken: undefined
|
|
346
|
-
};
|
|
344
|
+
this.cacheData = { ...defaultCacheData };
|
|
347
345
|
}
|
|
348
346
|
getValue() {
|
|
349
347
|
return this.cache.get(this.name);
|
|
350
348
|
}
|
|
351
349
|
async init() {
|
|
352
|
-
const defaultData = {
|
|
353
|
-
loginUsers: [],
|
|
354
|
-
user: undefined,
|
|
355
|
-
id: undefined,
|
|
356
|
-
accessToken: undefined,
|
|
357
|
-
refreshToken: undefined,
|
|
358
|
-
accessTokenExpiresIn: undefined,
|
|
359
|
-
createdAt: undefined
|
|
360
|
-
};
|
|
350
|
+
const defaultData = { ...this.cacheData };
|
|
361
351
|
if (this.cache.init) {
|
|
362
352
|
try {
|
|
363
353
|
const cacheData = await this.cache.init();
|
|
@@ -370,18 +360,18 @@ class LoginCacheStore {
|
|
|
370
360
|
}
|
|
371
361
|
return this.cacheData;
|
|
372
362
|
}
|
|
373
|
-
async setLoginUser(
|
|
374
|
-
const has = this.cacheData.loginUsers.find((u) => u.id ===
|
|
363
|
+
async setLoginUser(loginUser) {
|
|
364
|
+
const has = this.cacheData.loginUsers.find((u) => u.id === loginUser.id);
|
|
375
365
|
if (has) {
|
|
376
|
-
this.cacheData.loginUsers = this.cacheData?.loginUsers?.filter((u) => u?.id && u.id !==
|
|
377
|
-
}
|
|
378
|
-
this.cacheData.loginUsers.push(
|
|
379
|
-
this.cacheData.user =
|
|
380
|
-
this.cacheData.id =
|
|
381
|
-
this.cacheData.accessToken =
|
|
382
|
-
this.cacheData.refreshToken =
|
|
383
|
-
this.cacheData.accessTokenExpiresIn =
|
|
384
|
-
this.cacheData.createdAt =
|
|
366
|
+
this.cacheData.loginUsers = this.cacheData?.loginUsers?.filter((u) => u?.id && u.id !== loginUser.id);
|
|
367
|
+
}
|
|
368
|
+
this.cacheData.loginUsers.push(loginUser);
|
|
369
|
+
this.cacheData.user = loginUser.user;
|
|
370
|
+
this.cacheData.id = loginUser.id;
|
|
371
|
+
this.cacheData.accessToken = loginUser.accessToken;
|
|
372
|
+
this.cacheData.refreshToken = loginUser.refreshToken;
|
|
373
|
+
this.cacheData.accessTokenExpiresIn = loginUser.accessTokenExpiresIn;
|
|
374
|
+
this.cacheData.createdAt = loginUser.createdAt;
|
|
385
375
|
await this.setValue(this.cacheData);
|
|
386
376
|
}
|
|
387
377
|
getCurrentUser() {
|
|
@@ -417,22 +407,22 @@ class LoginCacheStore {
|
|
|
417
407
|
if (has) {
|
|
418
408
|
this.cacheData.loginUsers = this.cacheData?.loginUsers?.filter((u) => u?.id && u.id !== user.id);
|
|
419
409
|
}
|
|
420
|
-
this.cacheData.
|
|
421
|
-
this.cacheData.
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
410
|
+
const hasOther = this.cacheData.loginUsers.length > 0;
|
|
411
|
+
const current = this.cacheData.loginUsers[this.cacheData.loginUsers.length - 1];
|
|
412
|
+
if (hasOther && current) {
|
|
413
|
+
this.cacheData.user = current.user;
|
|
414
|
+
this.cacheData.id = current.id;
|
|
415
|
+
this.cacheData.accessToken = current.accessToken;
|
|
416
|
+
this.cacheData.refreshToken = current.refreshToken;
|
|
417
|
+
this.cacheData.accessTokenExpiresIn = current.accessTokenExpiresIn;
|
|
418
|
+
this.cacheData.createdAt = current.createdAt;
|
|
419
|
+
} else {
|
|
420
|
+
this.cacheData = { ...defaultCacheData };
|
|
421
|
+
}
|
|
426
422
|
await this.setValue(this.cacheData);
|
|
427
423
|
}
|
|
428
424
|
async clearAll() {
|
|
429
|
-
this.cacheData
|
|
430
|
-
this.cacheData.user = undefined;
|
|
431
|
-
this.cacheData.id = undefined;
|
|
432
|
-
this.cacheData.accessToken = undefined;
|
|
433
|
-
this.cacheData.refreshToken = undefined;
|
|
434
|
-
this.cacheData.accessTokenExpiresIn = undefined;
|
|
435
|
-
this.cacheData.createdAt = undefined;
|
|
425
|
+
this.cacheData = { ...defaultCacheData };
|
|
436
426
|
await this.setValue(this.cacheData);
|
|
437
427
|
}
|
|
438
428
|
}
|
|
@@ -1011,18 +1001,26 @@ class QueryLogin extends BaseQuery {
|
|
|
1011
1001
|
message: "登录失败"
|
|
1012
1002
|
};
|
|
1013
1003
|
}
|
|
1014
|
-
async refreshLoginUser(
|
|
1015
|
-
const res = await this.queryRefreshToken(
|
|
1004
|
+
async refreshLoginUser(opts) {
|
|
1005
|
+
const res = await this.queryRefreshToken(opts);
|
|
1016
1006
|
if (res.code === 200) {
|
|
1017
|
-
const { accessToken, refreshToken
|
|
1007
|
+
const { accessToken, refreshToken, accessTokenExpiresIn } = res?.data || {};
|
|
1018
1008
|
this.storage.setItem("token", accessToken || "");
|
|
1019
|
-
await this.beforeSetLoginUser({ accessToken, refreshToken
|
|
1009
|
+
await this.beforeSetLoginUser({ accessToken, refreshToken, accessTokenExpiresIn, check401: false });
|
|
1020
1010
|
}
|
|
1021
1011
|
return res;
|
|
1022
1012
|
}
|
|
1023
|
-
async queryRefreshToken(
|
|
1024
|
-
const
|
|
1025
|
-
let
|
|
1013
|
+
async queryRefreshToken(opts) {
|
|
1014
|
+
const refreshToken = opts?.refreshToken;
|
|
1015
|
+
let accessToken = opts?.accessToken;
|
|
1016
|
+
const _refreshToken = refreshToken ?? await this.cacheStore.getRefreshToken();
|
|
1017
|
+
let data = {};
|
|
1018
|
+
if (accessToken) {
|
|
1019
|
+
data.accessToken = accessToken;
|
|
1020
|
+
}
|
|
1021
|
+
if (_refreshToken) {
|
|
1022
|
+
data.refreshToken = _refreshToken;
|
|
1023
|
+
}
|
|
1026
1024
|
if (!_refreshToken) {
|
|
1027
1025
|
await this.cacheStore.clearCurrentUser();
|
|
1028
1026
|
return {
|
|
@@ -1042,7 +1040,7 @@ class QueryLogin extends BaseQuery {
|
|
|
1042
1040
|
if (response?.code === 401) {
|
|
1043
1041
|
const hasRefreshToken = await that.cacheStore.getRefreshToken();
|
|
1044
1042
|
if (hasRefreshToken) {
|
|
1045
|
-
const res = await that.queryRefreshToken(hasRefreshToken);
|
|
1043
|
+
const res = await that.queryRefreshToken({ refreshToken: hasRefreshToken });
|
|
1046
1044
|
if (res.code === 200) {
|
|
1047
1045
|
const { accessToken, refreshToken, accessTokenExpiresIn } = res?.data || {};
|
|
1048
1046
|
that.storage.setItem("token", accessToken || "");
|
|
@@ -1126,6 +1124,7 @@ class QueryLogin extends BaseQuery {
|
|
|
1126
1124
|
}
|
|
1127
1125
|
const isExpired = await this.cacheStore.getIsExpired();
|
|
1128
1126
|
if (isExpired) {
|
|
1127
|
+
console.log("token过期,正在刷新token", this.cacheStore.cacheData);
|
|
1129
1128
|
const res = await this.refreshLoginUser();
|
|
1130
1129
|
if (res.code === 200) {
|
|
1131
1130
|
return res.data?.accessToken || null;
|
package/dist/query-login.d.ts
CHANGED
|
@@ -172,13 +172,19 @@ declare class QueryLogin<T extends Cache = Cache> extends BaseQuery {
|
|
|
172
172
|
* @param refreshToken 刷新token,如果不传,则从缓存中获取
|
|
173
173
|
* @returns
|
|
174
174
|
*/
|
|
175
|
-
refreshLoginUser(
|
|
175
|
+
refreshLoginUser(opts?: {
|
|
176
|
+
refreshToken?: string;
|
|
177
|
+
accessToken?: string;
|
|
178
|
+
}): Promise<any>;
|
|
176
179
|
/**
|
|
177
180
|
* 刷新token
|
|
178
181
|
* @param refreshToken
|
|
179
182
|
* @returns
|
|
180
183
|
*/
|
|
181
|
-
queryRefreshToken(
|
|
184
|
+
queryRefreshToken(opts?: {
|
|
185
|
+
refreshToken?: string;
|
|
186
|
+
accessToken?: string;
|
|
187
|
+
}): Promise<any>;
|
|
182
188
|
/**
|
|
183
189
|
* 检查401错误,并刷新token, 如果refreshToken存在,则刷新token, 否则返回401
|
|
184
190
|
* 拦截请求,请使用run401Action, 不要直接使用 afterCheck401ToRefreshToken
|
package/dist/query-login.js
CHANGED
|
@@ -312,6 +312,16 @@ class BaseQuery {
|
|
|
312
312
|
}
|
|
313
313
|
|
|
314
314
|
// query/query-login/login-cache.ts
|
|
315
|
+
var defaultCacheData = {
|
|
316
|
+
loginUsers: [],
|
|
317
|
+
user: undefined,
|
|
318
|
+
id: undefined,
|
|
319
|
+
accessToken: undefined,
|
|
320
|
+
refreshToken: undefined,
|
|
321
|
+
accessTokenExpiresIn: undefined,
|
|
322
|
+
createdAt: undefined
|
|
323
|
+
};
|
|
324
|
+
|
|
315
325
|
class LoginCacheStore {
|
|
316
326
|
cache;
|
|
317
327
|
name;
|
|
@@ -321,13 +331,7 @@ class LoginCacheStore {
|
|
|
321
331
|
throw new Error("cache is required");
|
|
322
332
|
}
|
|
323
333
|
this.cache = opts.cache;
|
|
324
|
-
this.cacheData = {
|
|
325
|
-
loginUsers: [],
|
|
326
|
-
user: undefined,
|
|
327
|
-
id: undefined,
|
|
328
|
-
accessToken: undefined,
|
|
329
|
-
refreshToken: undefined
|
|
330
|
-
};
|
|
334
|
+
this.cacheData = { ...defaultCacheData };
|
|
331
335
|
this.name = opts.name;
|
|
332
336
|
}
|
|
333
337
|
async setValue(value) {
|
|
@@ -337,27 +341,13 @@ class LoginCacheStore {
|
|
|
337
341
|
}
|
|
338
342
|
async delValue() {
|
|
339
343
|
await this.cache.del();
|
|
340
|
-
this.cacheData = {
|
|
341
|
-
loginUsers: [],
|
|
342
|
-
user: undefined,
|
|
343
|
-
id: undefined,
|
|
344
|
-
accessToken: undefined,
|
|
345
|
-
refreshToken: undefined
|
|
346
|
-
};
|
|
344
|
+
this.cacheData = { ...defaultCacheData };
|
|
347
345
|
}
|
|
348
346
|
getValue() {
|
|
349
347
|
return this.cache.get(this.name);
|
|
350
348
|
}
|
|
351
349
|
async init() {
|
|
352
|
-
const defaultData = {
|
|
353
|
-
loginUsers: [],
|
|
354
|
-
user: undefined,
|
|
355
|
-
id: undefined,
|
|
356
|
-
accessToken: undefined,
|
|
357
|
-
refreshToken: undefined,
|
|
358
|
-
accessTokenExpiresIn: undefined,
|
|
359
|
-
createdAt: undefined
|
|
360
|
-
};
|
|
350
|
+
const defaultData = { ...this.cacheData };
|
|
361
351
|
if (this.cache.init) {
|
|
362
352
|
try {
|
|
363
353
|
const cacheData = await this.cache.init();
|
|
@@ -370,18 +360,18 @@ class LoginCacheStore {
|
|
|
370
360
|
}
|
|
371
361
|
return this.cacheData;
|
|
372
362
|
}
|
|
373
|
-
async setLoginUser(
|
|
374
|
-
const has = this.cacheData.loginUsers.find((u) => u.id ===
|
|
363
|
+
async setLoginUser(loginUser) {
|
|
364
|
+
const has = this.cacheData.loginUsers.find((u) => u.id === loginUser.id);
|
|
375
365
|
if (has) {
|
|
376
|
-
this.cacheData.loginUsers = this.cacheData?.loginUsers?.filter((u) => u?.id && u.id !==
|
|
377
|
-
}
|
|
378
|
-
this.cacheData.loginUsers.push(
|
|
379
|
-
this.cacheData.user =
|
|
380
|
-
this.cacheData.id =
|
|
381
|
-
this.cacheData.accessToken =
|
|
382
|
-
this.cacheData.refreshToken =
|
|
383
|
-
this.cacheData.accessTokenExpiresIn =
|
|
384
|
-
this.cacheData.createdAt =
|
|
366
|
+
this.cacheData.loginUsers = this.cacheData?.loginUsers?.filter((u) => u?.id && u.id !== loginUser.id);
|
|
367
|
+
}
|
|
368
|
+
this.cacheData.loginUsers.push(loginUser);
|
|
369
|
+
this.cacheData.user = loginUser.user;
|
|
370
|
+
this.cacheData.id = loginUser.id;
|
|
371
|
+
this.cacheData.accessToken = loginUser.accessToken;
|
|
372
|
+
this.cacheData.refreshToken = loginUser.refreshToken;
|
|
373
|
+
this.cacheData.accessTokenExpiresIn = loginUser.accessTokenExpiresIn;
|
|
374
|
+
this.cacheData.createdAt = loginUser.createdAt;
|
|
385
375
|
await this.setValue(this.cacheData);
|
|
386
376
|
}
|
|
387
377
|
getCurrentUser() {
|
|
@@ -417,22 +407,22 @@ class LoginCacheStore {
|
|
|
417
407
|
if (has) {
|
|
418
408
|
this.cacheData.loginUsers = this.cacheData?.loginUsers?.filter((u) => u?.id && u.id !== user.id);
|
|
419
409
|
}
|
|
420
|
-
this.cacheData.
|
|
421
|
-
this.cacheData.
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
410
|
+
const hasOther = this.cacheData.loginUsers.length > 0;
|
|
411
|
+
const current = this.cacheData.loginUsers[this.cacheData.loginUsers.length - 1];
|
|
412
|
+
if (hasOther && current) {
|
|
413
|
+
this.cacheData.user = current.user;
|
|
414
|
+
this.cacheData.id = current.id;
|
|
415
|
+
this.cacheData.accessToken = current.accessToken;
|
|
416
|
+
this.cacheData.refreshToken = current.refreshToken;
|
|
417
|
+
this.cacheData.accessTokenExpiresIn = current.accessTokenExpiresIn;
|
|
418
|
+
this.cacheData.createdAt = current.createdAt;
|
|
419
|
+
} else {
|
|
420
|
+
this.cacheData = { ...defaultCacheData };
|
|
421
|
+
}
|
|
426
422
|
await this.setValue(this.cacheData);
|
|
427
423
|
}
|
|
428
424
|
async clearAll() {
|
|
429
|
-
this.cacheData
|
|
430
|
-
this.cacheData.user = undefined;
|
|
431
|
-
this.cacheData.id = undefined;
|
|
432
|
-
this.cacheData.accessToken = undefined;
|
|
433
|
-
this.cacheData.refreshToken = undefined;
|
|
434
|
-
this.cacheData.accessTokenExpiresIn = undefined;
|
|
435
|
-
this.cacheData.createdAt = undefined;
|
|
425
|
+
this.cacheData = { ...defaultCacheData };
|
|
436
426
|
await this.setValue(this.cacheData);
|
|
437
427
|
}
|
|
438
428
|
}
|
|
@@ -1011,18 +1001,26 @@ class QueryLogin extends BaseQuery {
|
|
|
1011
1001
|
message: "登录失败"
|
|
1012
1002
|
};
|
|
1013
1003
|
}
|
|
1014
|
-
async refreshLoginUser(
|
|
1015
|
-
const res = await this.queryRefreshToken(
|
|
1004
|
+
async refreshLoginUser(opts) {
|
|
1005
|
+
const res = await this.queryRefreshToken(opts);
|
|
1016
1006
|
if (res.code === 200) {
|
|
1017
|
-
const { accessToken, refreshToken
|
|
1007
|
+
const { accessToken, refreshToken, accessTokenExpiresIn } = res?.data || {};
|
|
1018
1008
|
this.storage.setItem("token", accessToken || "");
|
|
1019
|
-
await this.beforeSetLoginUser({ accessToken, refreshToken
|
|
1009
|
+
await this.beforeSetLoginUser({ accessToken, refreshToken, accessTokenExpiresIn, check401: false });
|
|
1020
1010
|
}
|
|
1021
1011
|
return res;
|
|
1022
1012
|
}
|
|
1023
|
-
async queryRefreshToken(
|
|
1024
|
-
const
|
|
1025
|
-
let
|
|
1013
|
+
async queryRefreshToken(opts) {
|
|
1014
|
+
const refreshToken = opts?.refreshToken;
|
|
1015
|
+
let accessToken = opts?.accessToken;
|
|
1016
|
+
const _refreshToken = refreshToken ?? await this.cacheStore.getRefreshToken();
|
|
1017
|
+
let data = {};
|
|
1018
|
+
if (accessToken) {
|
|
1019
|
+
data.accessToken = accessToken;
|
|
1020
|
+
}
|
|
1021
|
+
if (_refreshToken) {
|
|
1022
|
+
data.refreshToken = _refreshToken;
|
|
1023
|
+
}
|
|
1026
1024
|
if (!_refreshToken) {
|
|
1027
1025
|
await this.cacheStore.clearCurrentUser();
|
|
1028
1026
|
return {
|
|
@@ -1042,7 +1040,7 @@ class QueryLogin extends BaseQuery {
|
|
|
1042
1040
|
if (response?.code === 401) {
|
|
1043
1041
|
const hasRefreshToken = await that.cacheStore.getRefreshToken();
|
|
1044
1042
|
if (hasRefreshToken) {
|
|
1045
|
-
const res = await that.queryRefreshToken(hasRefreshToken);
|
|
1043
|
+
const res = await that.queryRefreshToken({ refreshToken: hasRefreshToken });
|
|
1046
1044
|
if (res.code === 200) {
|
|
1047
1045
|
const { accessToken, refreshToken, accessTokenExpiresIn } = res?.data || {};
|
|
1048
1046
|
that.storage.setItem("token", accessToken || "");
|
|
@@ -1126,6 +1124,7 @@ class QueryLogin extends BaseQuery {
|
|
|
1126
1124
|
}
|
|
1127
1125
|
const isExpired = await this.cacheStore.getIsExpired();
|
|
1128
1126
|
if (isExpired) {
|
|
1127
|
+
console.log("token过期,正在刷新token", this.cacheStore.cacheData);
|
|
1129
1128
|
const res = await this.refreshLoginUser();
|
|
1130
1129
|
if (res.code === 200) {
|
|
1131
1130
|
return res.data?.accessToken || null;
|
package/package.json
CHANGED
|
@@ -90,6 +90,15 @@ export type LoginCacheStoreOpts<T extends Cache = Cache> = {
|
|
|
90
90
|
name: string;
|
|
91
91
|
cache: T;
|
|
92
92
|
};
|
|
93
|
+
const defaultCacheData: CacheLogin = {
|
|
94
|
+
loginUsers: [],
|
|
95
|
+
user: undefined,
|
|
96
|
+
id: undefined,
|
|
97
|
+
accessToken: undefined,
|
|
98
|
+
refreshToken: undefined,
|
|
99
|
+
accessTokenExpiresIn: undefined,
|
|
100
|
+
createdAt: undefined,
|
|
101
|
+
}
|
|
93
102
|
export class LoginCacheStore<T extends Cache = Cache> implements CacheStore<T> {
|
|
94
103
|
cache: T;
|
|
95
104
|
name: string;
|
|
@@ -100,12 +109,16 @@ export class LoginCacheStore<T extends Cache = Cache> implements CacheStore<T> {
|
|
|
100
109
|
}
|
|
101
110
|
// @ts-ignore
|
|
102
111
|
this.cache = opts.cache;
|
|
103
|
-
this.cacheData = {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
112
|
+
this.cacheData = { ...defaultCacheData };
|
|
113
|
+
this.name = opts.name;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* 设置缓存
|
|
117
|
+
* @param key
|
|
118
|
+
* @param value
|
|
119
|
+
* @returns
|
|
120
|
+
accessTokenExpiresIn: undefined,
|
|
121
|
+
createdAt: undefined,
|
|
109
122
|
};
|
|
110
123
|
this.name = opts.name;
|
|
111
124
|
}
|
|
@@ -125,13 +138,7 @@ export class LoginCacheStore<T extends Cache = Cache> implements CacheStore<T> {
|
|
|
125
138
|
*/
|
|
126
139
|
async delValue() {
|
|
127
140
|
await this.cache.del();
|
|
128
|
-
this.cacheData = {
|
|
129
|
-
loginUsers: [],
|
|
130
|
-
user: undefined,
|
|
131
|
-
id: undefined,
|
|
132
|
-
accessToken: undefined,
|
|
133
|
-
refreshToken: undefined,
|
|
134
|
-
};
|
|
141
|
+
this.cacheData = { ...defaultCacheData };
|
|
135
142
|
}
|
|
136
143
|
getValue(): Promise<CacheLogin> {
|
|
137
144
|
return this.cache.get(this.name);
|
|
@@ -140,15 +147,7 @@ export class LoginCacheStore<T extends Cache = Cache> implements CacheStore<T> {
|
|
|
140
147
|
* 初始化,设置默认值
|
|
141
148
|
*/
|
|
142
149
|
async init() {
|
|
143
|
-
const defaultData: CacheLogin = {
|
|
144
|
-
loginUsers: [],
|
|
145
|
-
user: undefined,
|
|
146
|
-
id: undefined,
|
|
147
|
-
accessToken: undefined,
|
|
148
|
-
refreshToken: undefined,
|
|
149
|
-
accessTokenExpiresIn: undefined,
|
|
150
|
-
createdAt: undefined,
|
|
151
|
-
};
|
|
150
|
+
const defaultData: CacheLogin = { ...this.cacheData };
|
|
152
151
|
if (this.cache.init) {
|
|
153
152
|
try {
|
|
154
153
|
const cacheData = await this.cache.init();
|
|
@@ -165,18 +164,18 @@ export class LoginCacheStore<T extends Cache = Cache> implements CacheStore<T> {
|
|
|
165
164
|
* 设置当前用户
|
|
166
165
|
* @param user
|
|
167
166
|
*/
|
|
168
|
-
async setLoginUser(
|
|
169
|
-
const has = this.cacheData.loginUsers.find((u) => u.id ===
|
|
167
|
+
async setLoginUser(loginUser: CacheLoginUser) {
|
|
168
|
+
const has = this.cacheData.loginUsers.find((u) => u.id === loginUser.id);
|
|
170
169
|
if (has) {
|
|
171
|
-
this.cacheData.loginUsers = this.cacheData?.loginUsers?.filter((u) => u?.id && u.id !==
|
|
170
|
+
this.cacheData.loginUsers = this.cacheData?.loginUsers?.filter((u) => u?.id && u.id !== loginUser.id);
|
|
172
171
|
}
|
|
173
|
-
this.cacheData.loginUsers.push(
|
|
174
|
-
this.cacheData.user =
|
|
175
|
-
this.cacheData.id =
|
|
176
|
-
this.cacheData.accessToken =
|
|
177
|
-
this.cacheData.refreshToken =
|
|
178
|
-
this.cacheData.accessTokenExpiresIn =
|
|
179
|
-
this.cacheData.createdAt =
|
|
172
|
+
this.cacheData.loginUsers.push(loginUser);
|
|
173
|
+
this.cacheData.user = loginUser.user;
|
|
174
|
+
this.cacheData.id = loginUser.id;
|
|
175
|
+
this.cacheData.accessToken = loginUser.accessToken;
|
|
176
|
+
this.cacheData.refreshToken = loginUser.refreshToken;
|
|
177
|
+
this.cacheData.accessTokenExpiresIn = loginUser.accessTokenExpiresIn;
|
|
178
|
+
this.cacheData.createdAt = loginUser.createdAt;
|
|
180
179
|
await this.setValue(this.cacheData);
|
|
181
180
|
}
|
|
182
181
|
|
|
@@ -214,22 +213,22 @@ export class LoginCacheStore<T extends Cache = Cache> implements CacheStore<T> {
|
|
|
214
213
|
if (has) {
|
|
215
214
|
this.cacheData.loginUsers = this.cacheData?.loginUsers?.filter((u) => u?.id && u.id !== user.id);
|
|
216
215
|
}
|
|
217
|
-
this.cacheData.
|
|
218
|
-
this.cacheData.
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
216
|
+
const hasOther = this.cacheData.loginUsers.length > 0;
|
|
217
|
+
const current = this.cacheData.loginUsers[this.cacheData.loginUsers.length - 1];
|
|
218
|
+
if (hasOther && current) {
|
|
219
|
+
this.cacheData.user = current.user;
|
|
220
|
+
this.cacheData.id = current.id;
|
|
221
|
+
this.cacheData.accessToken = current.accessToken;
|
|
222
|
+
this.cacheData.refreshToken = current.refreshToken;
|
|
223
|
+
this.cacheData.accessTokenExpiresIn = current.accessTokenExpiresIn;
|
|
224
|
+
this.cacheData.createdAt = current.createdAt;
|
|
225
|
+
} else {
|
|
226
|
+
this.cacheData = { ...defaultCacheData };
|
|
227
|
+
}
|
|
223
228
|
await this.setValue(this.cacheData);
|
|
224
229
|
}
|
|
225
230
|
async clearAll() {
|
|
226
|
-
this.cacheData
|
|
227
|
-
this.cacheData.user = undefined;
|
|
228
|
-
this.cacheData.id = undefined;
|
|
229
|
-
this.cacheData.accessToken = undefined;
|
|
230
|
-
this.cacheData.refreshToken = undefined;
|
|
231
|
-
this.cacheData.accessTokenExpiresIn = undefined;
|
|
232
|
-
this.cacheData.createdAt = undefined;
|
|
231
|
+
this.cacheData = { ...defaultCacheData };
|
|
233
232
|
await this.setValue(this.cacheData);
|
|
234
233
|
}
|
|
235
234
|
}
|
|
@@ -179,8 +179,8 @@ export class QueryLogin<T extends Cache = Cache> extends BaseQuery {
|
|
|
179
179
|
* @param refreshToken 刷新token,如果不传,则从缓存中获取
|
|
180
180
|
* @returns
|
|
181
181
|
*/
|
|
182
|
-
async refreshLoginUser(refreshToken?: string) {
|
|
183
|
-
const res = await this.queryRefreshToken(
|
|
182
|
+
async refreshLoginUser(opts?: { refreshToken?: string, accessToken?: string }) {
|
|
183
|
+
const res = await this.queryRefreshToken(opts);
|
|
184
184
|
if (res.code === 200) {
|
|
185
185
|
const { accessToken, refreshToken, accessTokenExpiresIn } = res?.data || {};
|
|
186
186
|
this.storage.setItem('token', accessToken || '');
|
|
@@ -193,9 +193,17 @@ export class QueryLogin<T extends Cache = Cache> extends BaseQuery {
|
|
|
193
193
|
* @param refreshToken
|
|
194
194
|
* @returns
|
|
195
195
|
*/
|
|
196
|
-
async queryRefreshToken(refreshToken?: string) {
|
|
197
|
-
const
|
|
198
|
-
let
|
|
196
|
+
async queryRefreshToken(opts?: { refreshToken?: string, accessToken?: string }) {
|
|
197
|
+
const refreshToken = opts?.refreshToken;
|
|
198
|
+
let accessToken = opts?.accessToken;
|
|
199
|
+
const _refreshToken = refreshToken ?? (await this.cacheStore.getRefreshToken());
|
|
200
|
+
let data: any = {};
|
|
201
|
+
if (accessToken) {
|
|
202
|
+
data.accessToken = accessToken;
|
|
203
|
+
}
|
|
204
|
+
if (_refreshToken) {
|
|
205
|
+
data.refreshToken = _refreshToken;
|
|
206
|
+
}
|
|
199
207
|
if (!_refreshToken) {
|
|
200
208
|
await this.cacheStore.clearCurrentUser();
|
|
201
209
|
return {
|
|
@@ -226,7 +234,7 @@ export class QueryLogin<T extends Cache = Cache> extends BaseQuery {
|
|
|
226
234
|
if (response?.code === 401) {
|
|
227
235
|
const hasRefreshToken = await that.cacheStore.getRefreshToken();
|
|
228
236
|
if (hasRefreshToken) {
|
|
229
|
-
const res = await that.queryRefreshToken(hasRefreshToken);
|
|
237
|
+
const res = await that.queryRefreshToken({ refreshToken: hasRefreshToken });
|
|
230
238
|
if (res.code === 200) {
|
|
231
239
|
const { accessToken, refreshToken, accessTokenExpiresIn } = res?.data || {};
|
|
232
240
|
that.storage.setItem('token', accessToken || '');
|
|
@@ -352,6 +360,7 @@ export class QueryLogin<T extends Cache = Cache> extends BaseQuery {
|
|
|
352
360
|
}
|
|
353
361
|
const isExpired = await this.cacheStore.getIsExpired();
|
|
354
362
|
if (isExpired) {
|
|
363
|
+
console.log('token过期,正在刷新token', this.cacheStore.cacheData);
|
|
355
364
|
const res = await this.refreshLoginUser()
|
|
356
365
|
if (res.code === 200) {
|
|
357
366
|
// 刷新成功,返回新的token
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
const cacheData = {
|
|
2
|
+
accessTokenExpiresIn: 604800,
|
|
3
|
+
createdAt: 1771926793545
|
|
4
|
+
};
|
|
5
|
+
|
|
6
|
+
const expiresIn = cacheData.createdAt + cacheData.accessTokenExpiresIn * 1000;
|
|
7
|
+
console.log('expiresIn', expiresIn);
|
|
8
|
+
const now = Date.now();
|
|
9
|
+
console.log('now', now);
|
|
10
|
+
console.log('isExpired', now >= expiresIn);
|