如何对 Amazon Cognito 用户的 email_verified 属性问题进行故障排除?

2 分钟阅读
0

我想解决与 Amazon Cognito 用户的 email_verified 属性有关的所有问题。

简短描述

Amazon Cognito 用户群体拥有一组标准属性,该属性可用于识别个人用户。在以下情况下,可能会更改可指示用户的电子邮件地址是否经过了验证的 email_verified 属性:

  • 用户更新了他们的电子邮件地址。当用户更新其电子邮件地址时,Amazon Cognito 会将 email_verified 属性更改为未验证
  • 电子邮件地址配置为别名。然后,即会创建具有重复电子邮件地址的用户。将电子邮件地址设置为别名时,只有一个用户可以将该电子邮件地址值作为 email_verified 属性。如果新用户的账户确认成功,则电子邮件地址别名将转移给新用户。然后,前用户的电子邮件地址将更改为未验证。有关更多信息,请参阅用户群体属性并查看自定义登录属性部分。
  • 联合用户或链接到联合用户的用户将使用电子邮件映射登录。联合用户登录时,您的用户群体所需的每个用户群体属性都必须存在映射。如果映射了电子邮件属性,则默认情况下,email_verified 属性将更改为未验证

解决方法

要解决 email_verified 属性的问题,请按照适用于您的情况的步骤进行操作。

**重要提示:**在以下 AWS 命令行界面(AWS CLI)命令示例中,将所有示例字符串的实例替换为您的值。(例如,将 "example_access_token" 替换为您的访问令牌值。)

更新电子邮件地址后的验证

要在用户更新后验证电子邮件地址:

1.    要让 Amazon Cognito 将验证码发送到更新的电子邮件地址,请配置用户群体的电子邮件验证设置

2.    如有必要,可通过调用 UpdateUserAttributes API 或 AdminUpdateUserAttributes API 更新电子邮件地址。

update-user-attributes 命令示例:

aws cognito-idp update-user-attributes --access-token "example_access_token" --user-attributes Name="email",Value="example_new_email"

admin-update-user-attributes 命令示例:

aws cognito-idp admin-update-user-attributes --user-pool-id "example_user_pool_id" --username "example_username" --user-attributes Name="email",Value="example_new_email"

**重要提示:**AdminUpdateUserAttributes API 还可用于通过将 email_verified 属性设置 True 来自动验证电子邮件。如果使用 AdminUpdateUserAttributes API 自动验证了电子邮件地址,则不需要执行下一步。使用 UpdateUserAttributes API 时,则需要执行下一步。

3.    检查您的新电子邮件收件箱中有无验证码。

4.    调用 VerifyUserAttribute API。将 AccessTokenAttributeName 的参数指定为 "email",然后输入上一步中的验证码。

verify-user-attribute 命令示例:

aws cognito-idp verify-user-attribute --access-token "example_access_token" --attribute-name "email" --code "example_verification_code"

要在初始代码到期后验证电子邮件地址:

1.    使用您的用户名登录应用程序,以检索您的访问令牌。

2.    调用 GetUserAttributeVerificationCode API。将 AttributeName 参数设置为 "email"

get-user-attribute-verification-code 命令示例:

aws cognito-idp get-user-attribute-verification-code --access-token "example_access_token" --attribute-name "email"

3.    调用 VerifyUserAttribute API。将 AccessTokenAttributeName 的参数指定为 "email"。输入上一步中的验证码。

确认具有重复电子邮件地址的新用户

要允许确认具有重复电子邮件地址的新用户:

1.    如有必要,调用 SignUp API,以使用配置的电子邮件地址注册用户。

sign-up 命令示例:

aws cognito-idp sign-up --client-id "example_client_id" --username "example_username" --password "example_password" --user-attributes Name="email",Value="example_user_email"

2.    调用 ConfirmSignUp API,其中 ForceAliasCreation 参数设置为 True

confirm-sign-up 命令示例:

aws cognito-idp confirm-sign-up --client-id "example_client_id" --username "example_username" --confirmation-code "example_confirmation_code" --force-alias-creation

要在注册后拒绝确认具有重复电子邮件地址的新用户:

1.    调用 ConfirmSignUp API,其中 ForceAliasCreation 参数设置为 False

**注意:**默认情况下,ForceAliasCreationFalse。因此,无需将其作为参数传递到请求中。

deny-sign-up 命令示例:

aws cognito-idp confirm-sign-up --client-id "example_client_id" --username "example_username" --confirmation-code "example_confirmation_code" --no-force-alias-creation

2.    通过将 ForceAliasCreation 参数设置为 False,API 返回以下错误:

An error occurred (AliasExistsException) when calling the ConfirmSignUp operation: An account with the email already exists.

以管理员身份创建具有重复电子邮件地址的新用户

要以管理员身份创建具有重复电子邮件地址的新用户:

1.    使用配置的电子邮件调用 AdminCreateUser API,其中 email_verified 属性设置为 TrueForceAliasCreation 参数设置为 True

admin-create-user 命令示例:

aws cognito-idp admin-create-user --user-pool-id "example_user_pool_id" --username "example_username" --user-attributes Name="email",Value="example_user_email" Name="email_verified",Value="True" --force-alias-creation

将 email_verified 属性映射到第三方身份提供者(IdP)

要在联合身份验证后保持 email_verified 属性的已验证状态:

1.    从 Amazon Cognito console(Amazon Cognito 控制台),将验证状态的 IdP 属性映射email_verified 属性。

**注意:**大多数 OpenID Connect(OIDC)提供者都包含 email_verified 属性。


相关信息

验证电子邮件地址和电话号码的更新

AWS 官方
AWS 官方已更新 1 年前