javascript - 用户池允许两个用户使用相同的电子邮件,尽管配置
问题描述
背景
我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 触发器是我唯一防御这种情况的方法吗?如果是这样,那么该实施的大致流程是什么样的?
解决方案
我将此发送给 AWS 支持。他们知道这个问题,但没有预计到达时间。
感谢您联系 AWS 高级支持。我了解您想知道 Cognito 团队是否知道此处发布的问题[1]。
我与 Cognito 团队进行了核实,是的,他们知道这个问题/错误。好消息是,我们已经向 Cognito 团队开出了故障单来解决这个问题。但是,我无法提供有关此修复何时上线的预计时间,因为我无法了解他们的开发/发布计划。但是,我要感谢您在提请我们注意此问题方面所做的宝贵贡献,我非常感谢。
推荐阅读
- python - 使用来自不同文件pygame的精灵对象类
- reactjs - Reducer 调度 React Redux
- azure - Azure 自定义标记策略,排除资源类型
- node.js - 无法访问 COVID 数据
- python - 如何使用 pygame.time.get_ticks() 在不影响用户输入的情况下进行延迟
- angular - 未找到模块:错误:无法解析“@firebase/app”Ionic Firebase
- regex - 如何在两个静态键之间提取字符串?
- python - 如何将 pip 与不同的 python 版本一起使用?
- c++ - 如何使用 std::variant 访问 std::pair 中的 .second?
- google-api - 使用 Google API 文档获取/读取数据时出现错误 401