feat: add expire user tokens
This commit is contained in:
parent
ad0d2e717f
commit
2547355964
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@kevisual/code-center-module",
|
||||
"version": "0.0.18",
|
||||
"version": "0.0.19",
|
||||
"description": "",
|
||||
"main": "dist/system.mjs",
|
||||
"module": "dist/system.mjs",
|
||||
|
@ -82,6 +82,15 @@ export class User extends Model {
|
||||
static async getOauthUser(token: string) {
|
||||
return await oauth.verifyToken(token);
|
||||
}
|
||||
/**
|
||||
* 清理用户的token,需要重新登陆
|
||||
* @param userid
|
||||
* @param orgid
|
||||
* @returns
|
||||
*/
|
||||
static async clearUserToken(userid: string, type: 'org' | 'user' = 'user') {
|
||||
return await oauth.expireUserTokens(userid, type);
|
||||
}
|
||||
/**
|
||||
* 获取用户信息, 并设置tokenUser
|
||||
* @param token
|
||||
|
@ -64,6 +64,7 @@ type StoreSetOpts = {
|
||||
[key: string]: any;
|
||||
};
|
||||
interface Store<T> {
|
||||
redis?: Redis;
|
||||
getObject: (key: string) => Promise<T>;
|
||||
setObject: (key: string, value: T, opts?: StoreSetOpts) => Promise<void>;
|
||||
expire: (key: string, ttl?: number) => Promise<void>;
|
||||
@ -73,7 +74,7 @@ interface Store<T> {
|
||||
delKeys: (keys: string[]) => Promise<number>;
|
||||
}
|
||||
export class RedisTokenStore implements Store<OauthUser> {
|
||||
private redis: Redis;
|
||||
redis: Redis;
|
||||
private prefix: string = 'oauth:';
|
||||
constructor(redis: Redis, prefix?: string) {
|
||||
this.redis = redis;
|
||||
@ -307,15 +308,16 @@ export class OAuth<T extends OauthUser> {
|
||||
* @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) {
|
||||
async expireUserTokens(userId: string, type: 'user' | 'org' = 'user') {
|
||||
const userPrefix = type === 'org' ? `org:${userId}:user:*:` : `user:${userId}`;
|
||||
const tokensKeys = await this.store.keys(`${userPrefix}:token:*`);
|
||||
for (const tokenKey of tokensKeys) {
|
||||
try {
|
||||
const token = await this.store.redis.get(tokenKey);
|
||||
const user = await this.store.getObject(token);
|
||||
this.store.delObject(user);
|
||||
} catch (error) {
|
||||
console.error('expireUserTokens error', userId, orgId, error);
|
||||
console.error('expireUserTokens error', userId, type, error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user