尽管配置,用户池仍允许两个用户使用相同的电子邮件

Mik*_*ick 5 javascript amazon-web-services amazon-cognito aws-amplify

背景

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

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

用户池属性配置


错误?

在我的前端代码中,我不小心将事件侦听器注册了两次,因此Auth.signUp()被两次调用(同时或至少快速连续地)使用相同的参数。

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


比赛条件?

我的第一个想法是,由于我将两个请求如此紧密地发送在一起,因此这可能是不可避免的竞争条件。如果我在两次调用之间引入了人为的暂停(断点或setTimeout说),则一切都会按预期进行。

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

{ code: 'InvalidParameterException',
  name: 'InvalidParameterException',
  message: 'Alias entry already exists for a different username' 
}
Run Code Online (Sandbox Code Playgroud)

令人遗憾的是,此响应具有误导性,因为我确实在该请求池中创建了第二个(重复的)用户。


MCVE

通过Auth.signUp在节点脚本或浏览器中同时执行两次,很容易重现这一点。 该存储库包含这两个示例。


问题

  • 这是Cognito的合法错误吗?
  • preSignUp Lambda是否可以触发我唯一的防御方式?如果是这样,那么该实现的大招会是什么样子?

jam*_*lol 10

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

感谢您联系 AWS 高级支持。我知道您想知道 Cognito 团队是否知道此处发布的问题 [1]。

我最后与 Cognito 团队进行了核实,是的,他们知道这个问题/错误。好消息是,我们已经通过 Cognito 团队打开了故障单来解决这个问题。但是,我无法提供有关此修复程序何时上线的预计到达时间,因为我对他们的开发/发布计划没有任何了解。但是,我要感谢您使我们注意到这个问题的宝贵贡献,我很感激。

  • 现在已经 2022 年 8 月了,问题仍然存在。 (5认同)
  • 他们怎么还没解决这个问题,太疯狂了! (2认同)