【发布时间】:2017-07-19 20:14:49
【问题描述】:
所以我试图了解 AWS Cognito,但我遇到了一些问题。
所以,现在我可以注册一个帐户,验证并登录。很简单。边缘案例就是我的墙所在的地方。
这是我目前掌握的信息:
-
username创建后无法更改 - 我使用 UUID 作为我的
username值 -
email被标记为别名,在 Cognito 术语中,这意味着除了username之外,我还可以使用它来登录。 -
如果
email被选为别名,根据文档,相同的值不能用作用户名(http://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-attributes.html#user-pool-settings-aliases):如果选择电子邮件作为别名,则用户名无法匹配有效的电子邮件格式。同样,如果选择电话号码作为别名,则该用户池的服务将不会接受与有效电话号码模式匹配的用户名。
-
后用于登录email地址只能在帐户经过验证 (http://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-attributes.html#user-pool-settings-aliases)电话号码和电子邮件地址只有在电话号码和电子邮件地址经过验证后才会成为用户的有效别名。因此,如果您选择将电子邮件地址和电话号码用作别名,我们建议您选择自动验证它们。
这是我的极端情况。
如果用户注册,但不立即验证:
- 他们被叫走了
- 可能应用崩溃了
- 他们失去了连接
- 他们的电池没电了
- 他们强行退出
- 应用程序被意外删除。
在他们看来,他们已经注册了,只是没有验证他们的帐户。在这一点上,它实际上无法验证他们认为他们注册的帐户。我想这可以通过消息传递来解决:
“警告您在验证您的电子邮件地址之前不会创建您的帐户。”或类似的规定。总之……
- 他们无法尝试登录,因为他们不知道随机分配为他们的
username的 UUID。 - 即使不是这样,他们也提供了电子邮件地址作为用户名。从用户的 POV 来看,他们甚至不知道他们的
username是什么,因为他们只输入了他们的电子邮件地址。 - 他们希望的最好结果就是尝试重新注册。 (假设他们阅读了上面的验证警告)在这种情况下,现在 Cognito 可能已经放弃了未确认帐户堆积。
“堆积”可能是一个过于强烈的短语,这可能是一个非常边缘的案例。
现在有利的一面是,由于他们尚未“验证”他们的email,他们可以使用相同的email 地址再次注册,因为email 在verified 之前不会受到唯一限制。如果有人试图验证一个已经验证过的地址,他们会得到一个AliasExistsException。这实际上提出了一个有趣的观点,我也刚刚测试过。
我可以使用电子邮件地址注册,然后验证该电子邮件地址,以便帐户得到确认。然后我可以右转并使用 same 电子邮件地址进行注册,并且在尝试使用重复的电子邮件地址验证该帐户之前,我不会收到官方的 AWS 错误。没有任何方法可以更早地显示此错误吗?我猜期望是开发人员在 Pre-Signup Trigger 中编写验证服务:
当用户提交他们的信息进行注册时会调用此触发器,允许您执行自定义验证以接受或拒绝注册请求。
总结并重申问题:
这似乎是必需,实际上,当使用带有 Cognito 的电子邮件地址时,需要预注册 Lambda 以确保自 AWS 例外以来不存在带有电子邮件的帐户在进行验证尝试之前不会处理。
我的假设是否正确?通过必需,我认为尽快让用户知道电子邮件地址不可用是非常合理的。例如:
John Doe : jdoe@gmail.com
Jane Doe : jdoe@gmail.com
【问题讨论】:
-
确实如此。您需要在预注册触发器中编写一些脚本来检查电子邮件。另外,您可以尝试在触发器中使用:
event.response.autoVerifyEmail = true;,但是这种方法不会发送邮件来检查邮件的真实性 -
我也遇到了这些问题。你找到方法了吗?
标签: amazon-web-services aws-cognito