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