temp add delete all keys
This commit is contained in:
		| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "name": "@kevisual/code-center-module", |   "name": "@kevisual/code-center-module", | ||||||
|   "version": "0.0.17", |   "version": "0.0.18", | ||||||
|   "description": "", |   "description": "", | ||||||
|   "main": "dist/system.mjs", |   "main": "dist/system.mjs", | ||||||
|   "module": "dist/system.mjs", |   "module": "dist/system.mjs", | ||||||
|   | |||||||
| @@ -70,6 +70,7 @@ interface Store<T> { | |||||||
|   delObject: (value?: T) => Promise<void>; |   delObject: (value?: T) => Promise<void>; | ||||||
|   keys: (key?: string) => Promise<string[]>; |   keys: (key?: string) => Promise<string[]>; | ||||||
|   setToken: (value: { accessToken: string; refreshToken: string; value?: T }, opts?: StoreSetOpts) => Promise<void>; |   setToken: (value: { accessToken: string; refreshToken: string; value?: T }, opts?: StoreSetOpts) => Promise<void>; | ||||||
|  |   delKeys: (keys: string[]) => Promise<number>; | ||||||
| } | } | ||||||
| export class RedisTokenStore implements Store<OauthUser> { | export class RedisTokenStore implements Store<OauthUser> { | ||||||
|   private redis: Redis; |   private redis: Redis; | ||||||
| @@ -168,6 +169,11 @@ export class RedisTokenStore implements Store<OauthUser> { | |||||||
|       await this.set(userPrefix + ':refreshToken:' + refreshToken, refreshToken, refreshTokenExpire); |       await this.set(userPrefix + ':refreshToken:' + refreshToken, refreshToken, refreshTokenExpire); | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |   async delKeys(keys: string[]) { | ||||||
|  |     const prefix = this.prefix; | ||||||
|  |     const number = await this.redis.del(keys.map((key) => prefix + key)); | ||||||
|  |     return number; | ||||||
|  |   } | ||||||
| } | } | ||||||
|  |  | ||||||
| export class OAuth<T extends OauthUser> { | export class OAuth<T extends OauthUser> { | ||||||
| @@ -285,4 +291,39 @@ export class OAuth<T extends OauthUser> { | |||||||
|     } |     } | ||||||
|     this.store.delObject(user); |     this.store.delObject(user); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 获取某一个用户的所有token | ||||||
|  |    * @param userId | ||||||
|  |    * @returns | ||||||
|  |    */ | ||||||
|  |   async getUserTokens(userId: string, orgId?: string) { | ||||||
|  |     const userPrefix = orgId ? `org:${orgId}:user:${userId}` : `user:${userId}`; | ||||||
|  |     const tokens = await this.store.keys(`${userPrefix}:token:*`); | ||||||
|  |     return tokens; | ||||||
|  |   } | ||||||
|  |   /** | ||||||
|  |    * 过期某一个用户的所有token | ||||||
|  |    * @param userId | ||||||
|  |    * @param orgId | ||||||
|  |    */ | ||||||
|  |   async expireUserTokens(userId: string, orgId?: string) { | ||||||
|  |     const userPrefix = orgId ? `org:${orgId}:user:${userId}` : `user:${userId}`; | ||||||
|  |     const tokens = await this.store.keys(`${userPrefix}:token:*`); | ||||||
|  |     for (const token of tokens) { | ||||||
|  |       try { | ||||||
|  |         const user = await this.store.getObject(token); | ||||||
|  |         this.store.delObject(user); | ||||||
|  |       } catch (error) { | ||||||
|  |         console.error('expireUserTokens error', userId, orgId, error); | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   /** | ||||||
|  |    * 过期所有用户的token, 然后重启服务 | ||||||
|  |    */ | ||||||
|  |   async expireAllTokens() { | ||||||
|  |     const tokens = await this.store.keys('*'); | ||||||
|  |     await this.store.delKeys(tokens); | ||||||
|  |   } | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user