11

背景

aws-amplify用来与 Cognito 交互。因此,当用户注册我的应用程序时,我会调用Auth.signUp(). 我只将用户名(电子邮件)和密码传递给这个函数。

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

用户池属性配置


错误?

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

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


种族条件?

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

但是,即使请求间隔非常紧密,第二个请求也会返回我期望的错误响应:

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

可悲的是,此响应具有误导性,因为我确实通过此请求在我的池中创建了第二个(重复的)用户。


MCVE

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


问题

  • 这是 Cognito 的合法错误吗?
  • preSignUp Lambda 触发器是我唯一防御这种情况的方法吗?如果是这样,那么该实施的大致流程是什么样的?
4

3 回答 3

11

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

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

我与 Cognito 团队进行了核实,是的,他们知道这个问题/错误。好消息是,我们已经向 Cognito 团队开出了故障单来解决这个问题。但是,我无法提供有关此修复何时上线的预计时间,因为我无法了解他们的开发/发布计划。但是,我要感谢您在提请我们注意此问题方面所做的宝贵贡献,我非常感谢。

于 2019-02-07T21:48:37.510 回答
1

我与 AWS 进行了交谈,仍然没有修复,也没有时间估计。

于 2021-08-15T15:33:02.767 回答
1

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

于 2020-07-26T21:00:28.407 回答