在 Keycloak 管理客户端 Node JS 中通过 'createdTimestamp' 获取用户
Get users by 'createdTimestamp' in Keycloak admin client Node JS
我正在尝试使用 Node.js
中的 Keycloak Admin Client 删除在特定时间之前创建的用户
我可以使用如下命令通过用户名、名字、姓氏获取用户:
const users = await keycloak.users.find({ username: 'rc' })
用户有一个 createdTimestamp
属性,但是当我试图通过它找到某人时,例如
const users = await keycloak.users.find({ createdTimestamp: 1640191005096 })
那么它只是 returns 所有用户。
用户看起来像这样:
{
id: 'd0ff32e5-7604-4d07-8067-ded2d96a608d',
createdTimestamp: 1640191005096,
username: 'rc',
enabled: true,
totp: false,
emailVerified: true,
firstName: 'rocket',
lastName: 'example',
email: 'example@example.com',
disableableCredentialTypes: [],
requiredActions: [],
notBefore: 0,
access: {
manageGroupMembership: true,
view: true,
mapRoles: true,
impersonate: true,
manage: true
}
}
很遗憾,这是不可能的
对应的keycloak api端点只允许搜索
- 电子邮件
- 用户名
- 名字
- 姓氏
见https://www.keycloak.org/docs-api/15.0/rest-api/index.html#_getusers
您唯一可能的解决方案是在客户端为 createdTimestamp
加载所有用户和 filter/search。
但这在很大程度上取决于您所在领域的用户数量。如果有很多,这个解决方案可能 slow/not 性能对你来说已经足够了。
我为此使用的解决方法是找到所有帐户,然后通过执行 .createdTimestamp
:
访问 createdTimestap
const users = await keycloak.users.find()
for (const [i, user] of users.entries()) {
if (user.createdTimestamp < dateToTimestamp) {
deletedUsers.push(user.username)
deletedIDs.push(user.id)
await keycloak.users.del({ id: user.id });
console.info(`Account with username: ${deletedUsers[i]} and ID: ${deletedIDs[i]} has been deleted from Keycloak`)
}
}
没有花费太多额外的努力。
我正在尝试使用 Node.js
中的 Keycloak Admin Client 删除在特定时间之前创建的用户我可以使用如下命令通过用户名、名字、姓氏获取用户:
const users = await keycloak.users.find({ username: 'rc' })
用户有一个 createdTimestamp
属性,但是当我试图通过它找到某人时,例如
const users = await keycloak.users.find({ createdTimestamp: 1640191005096 })
那么它只是 returns 所有用户。
用户看起来像这样:
{
id: 'd0ff32e5-7604-4d07-8067-ded2d96a608d',
createdTimestamp: 1640191005096,
username: 'rc',
enabled: true,
totp: false,
emailVerified: true,
firstName: 'rocket',
lastName: 'example',
email: 'example@example.com',
disableableCredentialTypes: [],
requiredActions: [],
notBefore: 0,
access: {
manageGroupMembership: true,
view: true,
mapRoles: true,
impersonate: true,
manage: true
}
}
很遗憾,这是不可能的
对应的keycloak api端点只允许搜索
- 电子邮件
- 用户名
- 名字
- 姓氏
见https://www.keycloak.org/docs-api/15.0/rest-api/index.html#_getusers
您唯一可能的解决方案是在客户端为 createdTimestamp
加载所有用户和 filter/search。
但这在很大程度上取决于您所在领域的用户数量。如果有很多,这个解决方案可能 slow/not 性能对你来说已经足够了。
我为此使用的解决方法是找到所有帐户,然后通过执行 .createdTimestamp
:
createdTimestap
const users = await keycloak.users.find()
for (const [i, user] of users.entries()) {
if (user.createdTimestamp < dateToTimestamp) {
deletedUsers.push(user.username)
deletedIDs.push(user.id)
await keycloak.users.del({ id: user.id });
console.info(`Account with username: ${deletedUsers[i]} and ID: ${deletedIDs[i]} has been deleted from Keycloak`)
}
}
没有花费太多额外的努力。