amazon-cognito - 如何保证 amazon-cognito 上的preferred_username 唯一性?
问题描述
我正在使用单个表将我的所有数据存储在 dynamodb 中,如下所示:
分区密钥 (PK) | 排序键 (SK) | 属性 |
---|---|---|
用户#gijoe | 简介#gijoe | {名称:“GI”,姓氏:“乔”} |
用户#gijoe | CARD#first-card | {名称:“国王”,图片:“./king.png”} |
我使用它preferred_username
作为分区键的一部分,因此需要它是唯一的以避免冲突用户数据。
如何保证我的用户池中的两个用户不能匹配preferred_username
?
编辑:@Lukas的回答做到了。请注意,它需要我删除并重新创建我的 cloudformation 堆栈,这就是我第一次尝试失败的原因。现在,当我尝试编辑时,preferred_username
我得到了我正在寻找的错误:
{
"message": "Already found an entry for the provided username.",
"code": "AliasExistsException",
"time": "2021-01-19T09:36:47.874Z",
"requestId": "7b52dbc2-58c5-4354-aa51-66d4dc7472a0",
"statusCode": 400,
"retryable": false,
"retryDelay": 85.84051584672932
}
解决方案
username
在单个池中是唯一的。与别名相同。preferred_username
可以配置为用户名别名。
https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-attributes.html
关键要点:
开发人员可以使用preferred_username 属性为用户提供他们可以更改的用户名。有关详细信息,请参阅别名概述。
用户名在用户池中必须是唯一的。用户名可以重复使用,但只有在用户名被删除且不再使用后才能使用。
您可以允许最终用户使用别名使用多个标识符登录。
preferred_username 属性为用户提供了更改其用户名的体验,而实际上用户的实际用户名值是不可更改的。如果您想启用此用户体验,请将新用户名值作为首选用户名提交,并选择首选用户名作为别名。然后用户可以使用他们输入的新值登录。如果选择preferred_username 作为别名,则只有在确认帐户时才能提供该值。注册期间无法提供该值。
……
别名值在用户池中必须是唯一的。如果为电子邮件地址或电话号码配置了别名,则提供的值只能在一个帐户中处于已验证状态。在注册过程中,如果提供的电子邮件地址或电话号码作为别名来自已使用的不同帐户,则注册成功。然而,当用户尝试使用此电子邮件(或电话号码)确认帐户并输入有效代码时,会引发 AliasExistsException 错误。该错误向用户表明已存在具有此电子邮件(或电话号码)的帐户。此时,用户可以放弃新帐户的创建,并可以尝试为旧帐户重置密码。如果用户继续创建新帐户,您的应用应使用 forceAliasCreation 选项调用 ConfirmSignUp API。
推荐阅读
- bash - 如果第 2 列相同,则减去第 1 列中的值
- python - 如何使用 Google 服务对 Docker 容器进行身份验证
- c# - 网页加载完成后继续处理我该怎么做?
- android - 如何以正确的方式处理 RecyclerView 位置?
- mysql - nodejs mysql查询依赖于另一个查询结果,然后在循环中将第二个查询结果插入到第一个
- r - R包 - 从导入的包中转移环境
- django - Django 图像处理应用程序?我应该在哪里调用 imageprocess 函数?在意见或形式?
- google-apps-script - 谷歌脚本匹配两个工作表之间的单元格并更新第二个工作表中的单元格
- javascript - 如何使用 .map 处理多个输入字段 - ReactJS
- c# - 如果任何财产的价值不同,如何比较?