AWS Cognito:如何防止使用相同电子邮件地址进行多次注册?

3

在我的用户池中,当前有两个登录流程选项:

  1. 使用用户名和电子邮件地址
  2. 使用电子邮件地址或电话号码

选项1: 用户名是唯一的。如果您尝试再次使用此用户名注册,将会收到错误消息。但是: 电子邮件地址不是唯一的。 您可以尝试使用此电子邮件地址再次注册。 用户将在用户池中创建,但您将无法重新确认此电子邮件地址。

选项2:电子邮件地址和/或电话号码是唯一的。但是,用户名不能再用于登录。

我需要什么?

我需要两者的混合体。 我希望我的用户使用用户名和电子邮件地址登录(这在选项1中是成立的),但我不想允许他们使用相同的电子邮件地址创建多个帐户(如选项2所需的那样需要唯一电子邮件)。 是否有简单的方法可以实现这一点? 我在Cognito控制台中找不到任何东西,感觉需要类似自定义Lambda触发器之类的东西。 谢谢任何提示!

2个回答

5

你已经朝着正确的方向前进了。你需要一个预注册的lambda函数来检查电子邮件的唯一性,这应该是相对简单的。以下是设置此类lambda函数的文档链接:

https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-pre-sign-up.html

你的Lambda需要能够在用户池上执行操作,以确定是否存在具有特定电子邮件的用户。
搜索此类用户的最简单方法是使用ListUsers API (https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListUsers.html),并使用过滤器仅选择具有相关电子邮件地址的用户。

你能给个例子吗?很遗憾,我没有写lambda函数的经验... - tobias

0

您应该创建一个自定义的Lambda函数并将其绑定到Cognito Pre-Signup触发器。基本上,当用户尝试注册时,Cognito将触发一个带有用户属性的事件,并调用一个自定义的Lambda函数来执行任何验证任务。

最近,在一个更简单的用例中,我遇到了类似的问题。我需要通过几种社交登录方法避免多个用户名(电子邮件)。因此,我创建并公开了一个GitHub存储库,可能是相关用例的良好起点:https://github.com/vhalbuquerque/pre-signup-lambda

我希望它能帮助任何人!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接