背景
我使用aws-amplify
与Cognito互动。因此,当用户向我的应用注册时,我会拨打Auth.signUp()
。我只将用户名(电子邮件)和密码传递给此功能。
我的用户池配置为仅允许通过电子邮件登录:
错误?
在我的前端代码中,我意外地两次注册了一个事件监听器,因此使用相同的参数调用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.
问题
答案 0 :(得分:2)
我将此发送给了AWS支持。他们知道此问题,但没有预计到达时间。
感谢您与AWS Premium支持联系。我知道你 想知道Cognito团队是否知道发布的问题 这里[1]。
我最终与Cognito团队核对了,是的,他们知道这一点 问题/错误。好消息是,我们已经开出了罚单 Cognito小组解决此问题。但是,我将无法提供 预计何时可以发布此修复程序,因为我对此没有任何了解 他们的开发/发布计划。但是,我要感谢你 您在使这个问题引起我们注意方面的宝贵贡献,我愿意 感谢它。
答案 1 :(得分:0)
Cognito将用户名限制为一个用户。但是,可以,多个用户可以共享一封电子邮件。