首页 > 解决方案 > 如何保证 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
}

标签: amazon-cognito

解决方案


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。


推荐阅读