AWS Cognito 更改电子邮件 - 更新前需要验证

问题描述 投票:0回答:3

我已将用户池设置为使用电子邮件作为用户标识符(还配置为需要电子邮件验证)。每个主要操作/流程(登录、注册、更改密码、重置密码)似乎都按预期正常工作。

一件重要的事情并不像人们预期的那样工作是更改电子邮件流程:

当请求更改电子邮件时,Cognito 按预期将验证码发送到新电子邮件,但是它还会在验证之前将电子邮件更新为新值。

当例如:新电子邮件输入错误(因此验证码永远不会到达)并且用户忘记密码时,这会导致问题。似乎没有办法从中恢复。 我是否遗漏、配置错误或滥用了某些内容?我进行了最小用户池自定义(可能不区分大小写除外)。

AWS 允许在验证之前更改电子邮件的原因是什么(即使 Cognito 实际上需要在注册期间、创建帐户之前进行验证)?

是否缺少一些用户池配置设置(或amba)或本地 SDK 设置?

顺便说一句:我使用 iOS SDK 中的

AWSMobileClient
作为客户端,但这可能并不重要(?)。

amazon-cognito aws-userpools
3个回答
6
投票

Cognito 团队终于解决了这个问题,但您需要选择正确的行为。

来自开发者指南

Amazon Cognito 还可以要求您的用户在 Amazon Cognito 更新属性之前验证新值。当您要求用户首先验证新值时,他们可以使用原始值登录并接收消息,直到验证新值为止。

要选择加入此行为,请按照该页面上的步骤操作:

  1. 登录 Amazon Cognito 控制台。如果出现提示,请输入您的 AWS 凭证。

  2. 在导航窗格中,选择用户池,然后选择用户池 你想编辑。

  3. 注册体验选项卡中,选择属性下的编辑 验证和用户帐户确认

  4. 选择 更新时保持原始属性值处于活动状态 待定

  5. 更新挂起时的活动属性值下,选择 您希望用户在亚马逊之前验证的属性 Cognito 更新值。

  6. 选择保存更改

这将启用用户池的默认行为:属性将保留其旧值,直到用户实际验证新值,此时 Cognito 会将值更新为新值。


2
投票

这是 Cognito 中的一个错误,仍然等待解决超过 3 年。许多人找到的解决这个问题的方法是创建自己的验证系统。

有关更多详细信息,请参阅:https://github.com/aws-amplify/amplify-js/issues/987


0
投票

如果您从 Amplify cli 的角度来看,您可以使用身份验证覆盖来实现 @Klaycon 建议的内容。

amplify override auth
- 选择您要更改的身份验证配置

将其生成的 override.ts 文件更新为:

import { AmplifyAuthCognitoStackTemplate } from '@aws-amplify/cli-extensibility-helper';

export function override(resources: AmplifyAuthCognitoStackTemplate) {
  resources.userPool.addPropertyOverride('UserAttributeUpdateSettings', {
    // Make it so updated attributes reflect in the user pool immediately
    // and don't require verification before actually updating.
    AttributesRequireVerificationBeforeUpdate: [],
  });
}

来源:https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cognito-userpool-userattributeupdatesettings.html

© www.soinside.com 2019 - 2024. All rights reserved.