因此,我试图了解AWS Cognito,但我遇到了一些障碍。
所以,现在我可以注册一个帐户,并验证并登录。简单就够了。边缘情况是我的墙壁。
这是我到目前为止的信息:
username
' s一旦创建就无法更改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。 username
甚至可能是什么,因为他们只输入了他们的电子邮件地址。"堆积"可能是一个过于强烈的短语,这可能是一个非常边缘的案例。
现在好的方面是,因为他们没有经过验证"他们email
他们可以使用相同的email
地址重新注册,因为email
没有得到唯一约束,直到verified
为止。如果有人试图验证已经过验证的地址,则会获得AliasExistsException
。这实际上提出了一个我刚刚测试过的有趣点。
我可以使用电子邮件地址注册,然后验证该电子邮件地址,以便帐户得到确认。然后,我可以右转并使用相同的电子邮件地址注册,并且在尝试使用重复的电子邮件地址验证该帐户之前,我不会收到正式的AWS错误。没有任何方法可以提前发现此错误?我想,开发人员希望在预注册触发器中编写验证服务:
当用户提交注册信息时,会调用此触发器,允许您执行自定义验证以接受或拒绝注册请求。
总结一下,并重申一下问题:
似乎必需,实际上,当使用带有Cognito的电子邮件地址时,需要预先注册Lambda才能确保使用电子邮件的帐户自已存在以来不存在在进行验证尝试之前,不会处理AWS异常。
我的假设在这里是否正确?通过必需,我认为让用户知道电子邮件地址尽快无法使用是非常合理的。例如:
John Doe : jdoe@gmail.com
Jane Doe : jdoe@gmail.com
答案 0 :(得分:0)
您是正确的。 另一种解决方案是创建一个lambda(不由preSignUp触发),并在用户完成在电子邮件字段中的键入时调用它。甚至在发送注册事件之前都会收到“此电子邮件已被使用”或“此电子邮件可用”的响应。
请参阅问题的第一部分。如果用户没有立即验证其电子邮件。您可能意味着通过代码进行确认。我更喜欢使用发送到电子邮件的链接进行确认,这样可以避免此问题。