feat: 修复oauthUserAuth中的revoke逻辑,在撤销时还需要将unused的所用的code都标记为已使用

This commit is contained in:
Pan Qiancheng 2025-10-24 11:04:20 +08:00
parent fda2b1be6b
commit c28bca6385
3 changed files with 70 additions and 13 deletions

View File

@ -10,16 +10,34 @@ const triggers = [
const { filter } = operation;
assert(filter, 'No filter found in revoke operation');
let res = 0;
// 如果没有token可以直接删除oauthUserAuthorization
// 如果是unused并且code的usedAt是空的则把code的usedAt全部设置为当前时间
const opRes0 = await context.operate("oauthAuthorizationCode", {
id: await generateNewIdAsync(),
action: "update",
data: {
usedAt: new Date()
},
filter: {
usedAt: {
$exists: false
},
oauthUserAuthorization$code: {
...filter,
// 未被使用肯定就没有tokenId
usageState: 'unused',
}
}
}, {});
res += opRes0.oauthAuthorizationCode?.update || 0;
// 如果没有token可以直接删除oauthUserAuthorization (可能是复用的之前的token 也可能是未被使用的授权记录)
const opRes = await context.operate("oauthUserAuthorization", {
id: await generateNewIdAsync(),
action: "remove",
data: {},
filter: {
...filter,
tokenId: {
$exists: false
}
// 未被使用肯定就没有tokenId
usageState: 'unused',
}
}, {});
res += opRes.oauthApplication?.remove || 0;

View File

@ -13,16 +13,34 @@ const triggers = [
const { filter } = operation;
(0, assert_1.default)(filter, 'No filter found in revoke operation');
let res = 0;
// 如果没有token可以直接删除oauthUserAuthorization
// 如果是unused并且code的usedAt是空的则把code的usedAt全部设置为当前时间
const opRes0 = await context.operate("oauthAuthorizationCode", {
id: await (0, uuid_1.generateNewIdAsync)(),
action: "update",
data: {
usedAt: new Date()
},
filter: {
usedAt: {
$exists: false
},
oauthUserAuthorization$code: {
...filter,
// 未被使用肯定就没有tokenId
usageState: 'unused',
}
}
}, {});
res += opRes0.oauthAuthorizationCode?.update || 0;
// 如果没有token可以直接删除oauthUserAuthorization (可能是复用的之前的token 也可能是未被使用的授权记录)
const opRes = await context.operate("oauthUserAuthorization", {
id: await (0, uuid_1.generateNewIdAsync)(),
action: "remove",
data: {},
filter: {
...filter,
tokenId: {
$exists: false
}
// 未被使用肯定就没有tokenId
usageState: 'unused',
}
}, {});
res += opRes.oauthApplication?.remove || 0;

View File

@ -15,18 +15,39 @@ const triggers = [
assert(filter, 'No filter found in revoke operation');
let res = 0;
// 如果没有token可以直接删除oauthUserAuthorization
// 如果是unused并且code的usedAt是空的则把code的usedAt全部设置为当前时间
const opRes0 = await context.operate("oauthAuthorizationCode", {
id: await generateNewIdAsync(),
action: "update",
data: {
usedAt: new Date()
},
filter: {
usedAt: {
$exists: false
},
oauthUserAuthorization$code: {
...filter,
// 未被使用肯定就没有tokenId
usageState: 'unused',
}
}
}, {});
res += opRes0.oauthAuthorizationCode?.update || 0;
// 如果没有token可以直接删除oauthUserAuthorization (可能是复用的之前的token 也可能是未被使用的授权记录)
const opRes = await context.operate("oauthUserAuthorization", {
id: await generateNewIdAsync(),
action: "remove",
data: {},
filter: {
...filter,
tokenId: {
$exists: false
}
// 未被使用肯定就没有tokenId
usageState: 'unused',
}
}, {})
}, {});
res += opRes.oauthApplication?.remove || 0;