该问题是因为在AWS Cognito的completeNewPasswordChallenge API中,输入参数包括不能由客户端写入的属性。解决方法是在调用该API之前将这些属性从输入参数中去除。
示例代码如下:
// 完成新密码挑战 API 调用 const completeNewPasswordChallenge = async ( newPassword: string, session: string, requiredAttributes: any, userAttributes: any ) => { try { const result = await Auth.completeNewPassword( session, newPassword, // 去除不能由客户端写入的属性 R.omit(nonWritableAttributes, userAttributes), // 需要传入的属性 requiredAttributes ); return result; } catch (err) { console.log('completeNewPasswordChallenge error', err); throw new Error(err); } };
其中,变量 nonWritableAttributes 包含不能由客户端写入的属性名列表,可以根据具体情况自行定义。在调用 completeNewPasswordChallenge API 之前,将这个列表中的属性名从 userAttributes 中去除即可。