如何删除AWS Cognito中已关联的第三方身份提供商用户账号?
搞定Cognito关联账号的批量删除问题
为啥删了邮箱账号,第三方账号还留着?
用adminLinkProviderForUser关联邮箱密码账号和Google这类第三方IdP账号后,两个账号会共享同一个用户ID,但在Cognito后台可能仍显示为独立条目。直接删除其中一个账号时,关联的第三方账号不会自动同步删除;而AdminDisableProviderForUser仅禁用登录权限,不会删掉账号实体本身。
一步步解决
1. 先获取关联的第三方身份信息
用你之前删除的邮箱账号用户名(或用户唯一ID sub),调用接口获取该用户关联的所有第三方身份详情:
const { AdminGetUserCommand } = require("@aws-sdk/client-cognito-identity-provider"); // 获取用户完整信息 const getUserCmd = new AdminGetUserCommand({ UserPoolId: poolId, Username: "你的邮箱账号用户名" // 若邮箱已删,替换为用户sub值 }); const userInfo = await this.cognito.send(getUserCmd); // 提取所有关联的第三方身份 const linkedThirdParties = userInfo.UserIdentities || [];
2. 解除两个账号的关联关系
将每个第三方身份与邮箱账号解绑,让它们恢复为独立的账号实体:
const { AdminUnlinkProviderForUserCommand } = require("@aws-sdk/client-cognito-identity-provider"); for (const party of linkedThirdParties) { const unlinkCmd = new AdminUnlinkProviderForUserCommand({ UserPoolId: poolId, Username: "你的邮箱账号用户名", // 或用户sub值 ProviderName: party.ProviderName, // 例如 "Google" ProviderUserId: party.ProviderUserId // 第三方平台返回的用户ID }); await this.cognito.send(unlinkCmd); }
3. 定位并删除第三方账号
解绑完成后,通过第三方平台的用户ID查询对应的Cognito账号,执行删除操作:
const { AdminListUsersCommand, AdminDeleteUserCommand } = require("@aws-sdk/client-cognito-identity-provider"); for (const party of linkedThirdParties) { // 根据第三方用户ID筛选目标账号 const listUsersCmd = new AdminListUsersCommand({ UserPoolId: poolId, Filter: `identities[0].userId = "${party.ProviderUserId}"` }); const { Users } = await this.cognito.send(listUsersCmd); // 删除找到的第三方账号 if (Users.length > 0) { const deleteCmd = new AdminDeleteUserCommand({ UserPoolId: poolId, Username: Users[0].Username }); await this.cognito.send(deleteCmd); } }
注意事项
- 如果邮箱账号已被删除,必须使用用户的
sub属性(唯一用户ID)来查询关联信息,不能再用邮箱用户名。 AdminListUsers的Filter参数要严格符合Cognito的过滤规则,确保精准匹配到目标第三方账号。
内容的提问来源于stack exchange,提问作者fraktus
相关产品推荐
相关产品推荐

