AWS Cognito 响应 New_Password_Required 挑战 returns "Cannot modify an already provided email"
AWS Cognito Respond to New_Password_Required challenge returns "Cannot modify an already provided email"
一个已经成功运行了几年的应用程序在尝试使用 AWS Cognito 响应 NEW_PASSWORD_REQUIRED 挑战时开始抛出以下错误:
{"__type":"NotAuthorizedException","message":"无法修改已提供的电子邮件"}
我发送以下内容,似乎与文档相符。
{
"ChallengeName": "NEW_PASSWORD_REQUIRED",
"ClientId": <client_id>,
"ChallengeResponses": {
"userAttributes.email": "test@example.com",
"NEW_PASSWORD": "testP@55w0rd",
"USERNAME": "testfake"
},
"Session": <session_id>
}
前端没有任何变化;我们是否在 Cognito/AWS 端进行了可能导致此错误的配置更改?
我最近开始遇到同样的错误。我正在关注 Use case 23 Authenticate a user and set new password for a user。经过一些调查,我发现 userAttributes
中的 email
属性导致 completeNewPasswordChallenge
抛出错误。我从authenticateUser
得到的userAttributes
曾经是一个空对象{}
,但现在看起来是这样的:
{ email_verified: 'true', email: 'test@example.com' }
在使用 completeNewPasswordChallenge
的 userAttribute 之前,我不得不删除 email
属性(以及用例 23 中示例代码中所示的 email_verified
属性)。所以我的代码现在是这样的:
cognitoUser.authenticateUser(authenticationDetails, {
...
newPasswordRequired: function(userAttributes, requiredAttributes) {
// the api doesn't accept this field back
delete userAttributes.email_verified;
delete userAttributes.email; // <--- add this line
// store userAttributes on global variable
sessionUserAttributes = userAttributes;
}
});
// ... handle new password flow on your app
handleNewPassword(newPassword) {
cognitoUser.completeNewPasswordChallenge(newPassword, sessionUserAttributes);
}
我猜 aws 最近更改了他们的 api,但我还没有找到关于此更改的任何文档。即使 email
属性的值与用户的实际电子邮件相同,如果您将其包含在请求中,它也会抛出 Cannot modify an already provided email
错误。删除它可以解决问题。
一个已经成功运行了几年的应用程序在尝试使用 AWS Cognito 响应 NEW_PASSWORD_REQUIRED 挑战时开始抛出以下错误:
{"__type":"NotAuthorizedException","message":"无法修改已提供的电子邮件"}
我发送以下内容,似乎与文档相符。
{
"ChallengeName": "NEW_PASSWORD_REQUIRED",
"ClientId": <client_id>,
"ChallengeResponses": {
"userAttributes.email": "test@example.com",
"NEW_PASSWORD": "testP@55w0rd",
"USERNAME": "testfake"
},
"Session": <session_id>
}
前端没有任何变化;我们是否在 Cognito/AWS 端进行了可能导致此错误的配置更改?
我最近开始遇到同样的错误。我正在关注 Use case 23 Authenticate a user and set new password for a user。经过一些调查,我发现 userAttributes
中的 email
属性导致 completeNewPasswordChallenge
抛出错误。我从authenticateUser
得到的userAttributes
曾经是一个空对象{}
,但现在看起来是这样的:
{ email_verified: 'true', email: 'test@example.com' }
在使用 completeNewPasswordChallenge
的 userAttribute 之前,我不得不删除 email
属性(以及用例 23 中示例代码中所示的 email_verified
属性)。所以我的代码现在是这样的:
cognitoUser.authenticateUser(authenticationDetails, {
...
newPasswordRequired: function(userAttributes, requiredAttributes) {
// the api doesn't accept this field back
delete userAttributes.email_verified;
delete userAttributes.email; // <--- add this line
// store userAttributes on global variable
sessionUserAttributes = userAttributes;
}
});
// ... handle new password flow on your app
handleNewPassword(newPassword) {
cognitoUser.completeNewPasswordChallenge(newPassword, sessionUserAttributes);
}
我猜 aws 最近更改了他们的 api,但我还没有找到关于此更改的任何文档。即使 email
属性的值与用户的实际电子邮件相同,如果您将其包含在请求中,它也会抛出 Cannot modify an already provided email
错误。删除它可以解决问题。