ios - 如何在 AWS Cognito 中设置排序键(辅助键)?
问题描述
我正在使用 Cognito 用户池进行 iOS 应用用户注册。通常,在使用 Cognito 注册用户时,我使用电子邮件作为用户 ID。而且我正在收集其他信息,如电话号码、公司名称等。在这种情况下,当我尝试使用具有不同公司名称的相同电子邮件 ID 进行注册时,它会显示类似用户已存在的警报。
在我的新工作案例中,我想用不同的公司名称保存/注册相同的电子邮件。我怎样才能实现它?
例如,如果我们使用的是 DynamoDB 表,我们有 Partition 键和 Sort 键。通过使用这些我们将电子邮件设置为分区键,将企业名称设置为排序键,我们可以实现唯一性。
我们可以使用 Cognito 实现相同的功能吗?Cognito 是否支持分区键和排序键概念?有没有办法通过使用 Cognito 来实现这一点?请帮我解决这个问题。
解决方案
让我们从这个链接开始:
只要不需要,您就可以拥有可更改的标准属性。您也可以添加自定义属性,但它们是不可更改的。
好吧,让我们继续讨论一些项目的另一个案例,我需要将用户联合身份 ID(即 ap-northeast-1:3c2f5c30-0dc8-4d74-91a8-bf5c688abcde)存储到 cognito 用户池属性中。我应该将它存储在自定义属性中(即 custom:identity_id),因为它在未来永远不会改变。
回到您的案例,因为它将是动态值,用户可以更改他们的组织列表,以便您可以利用未使用的标准属性。例如,我将使用“zoneinfo”,尽管使用未关联的属性看起来很奇怪,因为没有名称为“organization”的属性。然而,一旦登录,至少用户可以从他们的令牌中提取他们的组织,如下所示:
"zoneinfo": "[org1, org2, org3, etc]"
但它不能完全适应您的情况,因为它应该在用户注册后存储。而如果你在需要注册时设置了“zoneinfo”,那么它必须是不可更改的。为了解决这个问题,您可以利用 cognito 用户池Post-Confirmation 触发器运行一些逻辑来初始化具有空组织列表的标准属性(即“zoneinfo”:“[]”)adminUpdateUserAttributes。这样用户就可以修改此属性,因为它不是必需的属性。
adminUpdateUserAttributes 示例:
async function updateOrgAttr() {
try {
var params = {
UserAttributes: [ /* required */
{
Name: 'zoneinfo', /* required */
Value: '[]'
}
],
UserPoolId: 'ap-northeast-1_xxxxxxxx', /* required */
Username: event.userName /* event.userName is an item of post-confirmation trigger event source */
};
let cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider();
await cognitoidentityserviceprovider.adminUpdateUserAttributes(params).promise()
} catch(e) {
throw e
}
}
推荐阅读
- jquery - 数据有时显示有时不显示在元素 li
- java - TiledGame,如何检查附近的环绕块是否发生碰撞?
- c# - Array 2D GetUpperBound(1) 返回 4 而不是 8
- rest - 对外部资源的 Web 身份验证
- angular - 如何在 Reactjs 中制作类似于 Angular 的路由器插座?
- php - 使用 AJAX 和 PHP 填充表
- talend - 对于第一个表中的不匹配行,Talend tMap 左外连接输出零而不是空
- python - Python将多个变量输出到文本文件
- python - 保存 Qtreewidget 项目并通过选择恢复它
- vba - 使用 VBA 和 Word 确定文本是否为字段