更新用户电子邮件地址后从 Cognito 发送的双重验证电子邮件

时间:2021-06-16 15:05:41

标签: java angular email amazon-cognito amplify

我在我的应用程序中使用 AWS Cognito 进行用户管理。用户池配置为用户使用唯一的用户名和密码登录,并且多个用户可以具有相同的电子邮件地址。我正在使用 Amplify 内置组件进行身份验证。

我似乎无法解决的问题是更新用户电子邮件时出现双重验证消息。当电子邮件被更改时 CustomMessage_UpdateUserAttribute 被触发,当用户想要验证更改的电子邮件时 CustomMessage_VerifyUserAttribute 被触发。我有一个自定义 lambda 函数,用于侦听这些触发器,并根据用户尝试执行的操作发送相应的电子邮件:登录、验证电子邮件、重置密码等。

因此,如果用户修改了他的电子邮件地址,CustomMessage_UpdateUserAttribute 将被触发,并且用户会收到一封带有以下(默认)消息的电子邮件“请验证您的帐户并输入以下验证码以重置您的密码:xxxxxx”。但是,当该用户登录时,amplify 会识别出该用户处于“verifyContact”状态,并显示您可以在下面看到的屏幕。

enter image description here

用户有两个选择:

  1. 跳过验证,或
  2. 选择等待验证的唯一属性,然后单击“验证”按钮。

点击“验证”按钮会触发 CustomMessage_VerifyUserAttribute 并向用户发送另一封电子邮件。用户被重定向到以下屏幕。

enter image description here

第二个屏幕显示用户应该在何处输入新发送的代码(来自第二封电子邮件)。因此,用户绝对不需要在电子邮件更新时自动发送的第一封电子邮件(和代码)。我试图找到一种方法来避免发送电子邮件,但没有找到好的解决方案。 Congito 不会让您在不发送确认代码的情况下覆盖 lambda 中的消息,这是完全没有必要的,因为没有用户可以输入它的地方。我不想禁用电子邮件验证,或在更新时将 email_verified 设置为 true。

你有什么建议我可以做什么吗?

1 个答案:

答案 0 :(得分:0)

如果有人遇到同样的问题,解决方法是更新 email_verified 字段两次。更新电子邮件时,将 email_verified 设置为 true。这将阻止 Cognito 在 CustomMessage_UpdateUserAttribute 上发送和发送电子邮件。然后在单独的用户属性更新请求中只将 email_verified 字段更新为 false。这会将用户设置为“verifyContact”状态并在登录时请求电子邮件验证。