按照 AWS WildRydes 示例构建无服务器 Web 应用程序,在设置 Cognito 用户池后,任何在示例网站上注册用户的尝试都会生成错误:
InvalidParameterException: Username should be an email
我使用的用户名是有效的电子邮件(我的真实电子邮件地址)。错误正在从 Cognito 服务返回。谷歌没有发现任何明显的东西。我已经仔细按照样本进行了。
很明显 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,所以我不确定这是怎么发生的,可能是:
无论如何,我发布这个是为了帮助其他人体验它。
Peter 的回答已经很好地回答了这个问题。
另一种解决方案也是删除对 Username(email) 的函数调用
之前: userPool.signUp(email, password, [attributeEmail], null,
之后: userPool.signUp(toUsername(email), password, [attributeEmail], null,