【问题标题】:How do I fix the AWS Wild Rydes sample error: InvalidParameterException: "username should be an email"如何修复 AWS Wild Rydes 示例错误:InvalidParameterException:\"username should be an email\"
【发布时间】:2023-02-13 09:29:48
【问题描述】:
跟随 AWS WildRydes 示例到 Build a Serverless Web Application,在设置 Cognito 用户池后,任何在示例网站上注册用户的尝试都会生成错误:
InvalidParameterException: Username should be an email
我使用的用户名是有效的电子邮件(我的真实电子邮件地址)。错误正在从 Cognito 服务返回。谷歌没有发现任何明显的东西。我仔细观察了样本。
【问题讨论】:
标签:
amazon-web-services
amazon-cognito
sample
【解决方案1】:
很明显,Cognito 正在尝试验证传递的用户名并发现它不是有效的电子邮件地址,尽管我提供了有效的电子邮件。 Cognito 不太可能出现错误,因此我深入研究了 AWS 提供的示例代码。在 js/cognito-auth.js 文件中,我发现在将用户名参数传递给 Cognito 的地方,它被包装在 toUsername() 函数中:
userPool.signUp(toUsername(email), password, [attributeEmail], null,
该函数将电子邮件中的 @ 替换为 -at-:
function toUsername(email) {
return email.replace('@', '-at-');
}
我采用了快捷方式并更新了 toUsername() 函数:
function toUsername(email) {
return email;
}
在将更改推送到 CodeCommit 并等待 Amplify 部署它之后,我的注册和登录工作正常。我更改的示例代码直接来自 AWS,所以我不确定这是怎么发生的,可能是:
- 我在用户池设置上犯了一个错误,尽管我非常小心并且都是默认设置
- 用户池的默认设置发生了一些变化
- Cognito 添加了强制用户名是电子邮件的验证。
无论如何,我发布这个是为了帮助其他人体验它。
【解决方案2】:
不能投票,但我花了太多时间试图在没有堆栈溢出的情况下解决它。所以非常感谢你结束了我的痛苦。