用户池允许两个用户使用相同的电子邮件进行配置

时间:2018-06-06 22:58:14

标签: javascript amazon-web-services amazon-cognito aws-amplify

背景

我使用aws-amplify与Cognito互动。因此,当用户向我的应用注册时,我会拨打Auth.signUp()。我只将用户名(电子邮件)和密码传递给此功能。

我的用户池配置为仅允许通过电子邮件登录:

User Pool Attributes configuration

错误?

在我的前端代码中,我意外地两次注册了一个事件监听器,因此使用相同的参数调用Auth.signUp()两次(同时或至少快速连续)。

这导致在我的用户池中创建了两个用户,并使用相同的电子邮件。我对用户池配置的理解表明,这是不可能的。

种族条件?

我的第一个想法是,由于我发送了两个非常接近的请求,这可能是某种不可避免的竞争条件。如果我在调用之间引入一个人为的暂停(断点,或者说setTimeout,那么)一切都按预期工作。

但是,即使请求间隔很小,第二个请求 也会返回错误响应我希望:

{ code: 'InvalidParameterException',
  name: 'InvalidParameterException',
  message: 'Alias entry already exists for a different username' 
}

可悲的是,这种反应具有误导性,因为我使用此请求获得在我的池中创建的第二个(重复)用户。

MCVE

通过在节点脚本或浏览器中同时执行两次Auth.signUp,可以轻松地重现这一点。 This repository contains examples of both.

问题

  • 这是Cognito的合法错误吗?
  • preSignUp Lambda触发器是我唯一可以防范这种情况的方法吗?如果是这样,该实现的广泛描述会是什么样的?

2 个答案:

答案 0 :(得分:2)

我将此发送给了AWS支持。他们知道此问题,但没有预计到达时间。

  

感谢您与AWS Premium支持联系。我知道你   想知道Cognito团队是否知道发布的问题   这里[1]。

     

我最终与Cognito团队核对了,是的,他们知道这一点   问题/错误。好消息是,我们已经开出了罚单   Cognito小组解决此问题。但是,我将无法提供   预计何时可以发布此修复程序,因为我对此没有任何了解   他们的开发/发布计划。但是,我要感谢你   您在使这个问题引起我们注意方面的宝贵贡献,我愿意   感谢它。

答案 1 :(得分:0)

Cognito将用户名限制为一个用户。但是,可以,多个用户可以共享一封电子邮件。