如何修复 AWS Wild Rydes 示例错误:InvalidParameterException:“用户名应该是电子邮件”

问题描述 投票:0回答:2

按照 AWS WildRydes 示例构建无服务器 Web 应用程序,在设置 Cognito 用户池后,任何在示例网站上注册用户的尝试都会生成错误:

 InvalidParameterException: Username should be an email

我使用的用户名是有效的电子邮件(我的真实电子邮件地址)。错误正在从 Cognito 服务返回。谷歌没有发现任何明显的东西。我已经仔细按照样本进行了。

amazon-web-services amazon-cognito sample
2个回答
10
投票

很明显 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,所以我不确定这是怎么发生的,可能是:

  1. 我在用户池设置上犯了一个错误,尽管我非常小心并且都是默认设置
  2. 用户池的默认设置发生了一些变化
  3. Cognito 添加了验证,强制用户名是电子邮件。

无论如何,我发布这个是为了帮助其他人体验它。


0
投票

Peter 的回答已经很好地回答了这个问题。

另一种解决方案也是删除对 Username(email) 的函数调用

之前: userPool.signUp(email, password, [attributeEmail], null,

之后: userPool.signUp(toUsername(email), password, [attributeEmail], null,

© www.soinside.com 2019 - 2024. All rights reserved.