gpt4 book ai didi

javascript - AWS Cognito 身份验证返回错误 - Javascript SDK

转载 作者:行者123 更新时间:2023-11-29 23:17:13 26 4
gpt4 key购买 nike

我正在使用 AWS Cognito 在我正在构建的新应用程序中对用户进行身份验证。

我在我的项目中使用 amazon-cognito-identity-js 库(Github 链接:https://github.com/aws-amplify/amplify-js/tree/master/packages/amazon-cognito-identity-js)。由于此特定用户池中的用户无法自行注册 - 我手动注册 - 我知道我需要 Github 的 README.md 中所述的“用例 23”。

所以我的代码如下:

    ...
const userPoolData = {
UserPoolId: <MY_USER_POOL_ID>,
ClientId: <MY_CLIENT_ID>
};

const userPool = new CognitoUserPool(userPoolData);

const authenticationData = {
Username: email,
Password: tempPassword
};
const userData = {
Username: email,
Pool: userPool
}

const authenticationDetails = new AuthenticationDetails(authenticationData);
const cognitoUser = new CognitoUser(userData);

cognitoUser.authenticateUser(authenticationDetails, {
onSuccess: (result) => {
console.log(result);
},
onFailure: (err) => {
console.log("Error from cognito auth: ", err);
},
newPasswordRequired: (userAttributes) => {
delete userAttributes.email_verified;
cognitoUser.completeNewPasswordChallenge(newPassword, userAttributes, this);
}
})
...

当我执行这段代码时,我成功地确认了我的用户。我可以在 AWS Cognito 控制台中看到这一点。但是,我没有收到 result 对象,而是在客户端的 javascript 控制台中收到一条错误消息:

Uncaught (in promise) TypeError: Cannot read property 'onFailure' of undefined
at eval (CognitoUser.js:572)
at eval (Client.js:108)

但是当我尝试使用 newPassword 代替之前发送的 tempPassword 登录时,我现在能够成功获得结果反对所有存在的三个 token 。

所以我知道一切正常,但不是我所期望的。

是什么导致了这个错误?我该如何解决?我想在用户首次使用 tempPassword 和他们的 newPassword 登录时立即收到 result 对象,以便他们可以开始使用该应用程序。

编辑:

认为我必须自己检索 userAttributes 的想法是错误的。 newPasswordRequired 函数自动传递它们。因此,我更新了上面的代码以配合 Github 上展示的“用例 23”。

但现在我得到了一个与以前略有不同的错误:

Uncaught (in promise) TypeError: callback.onFailure is not a function
at eval (CognitoUser.js:572)
at eval (Client.js:108)

就 Cognito 而言,一切仍然有效,但我的 onFailure 函数肯定有问题,这很奇怪。

有什么想法吗?

提前致谢

最佳答案

好的,我解决了。问题是我使用的是 ES6 箭头函数。正如 Apolozeus 指出的那样,我需要将 this 传递给 cognitoUser.completeNewPasswordChallenge 函数。但由于 ES6 的行为方式,this 返回未定义。因此,将我的 cognitoUser.authenticateUser 函数更改为以下内容解决了所有问题:

  cognitoUser.authenticateUser(authenticationDetails, {
onSuccess: function (result) {
resolve(result.getAccessToken().getJwtToken());
},
onFailure: function (err) {
console.log("Error from cognito promise: ", err);
reject(err);
},
newPasswordRequired: function (userAttributes) {
delete userAttributes.email_verified;
cognitoUser.completeNewPasswordChallenge(newPassword, userAttributes, this);
}
})

我将试用一下 amazon-cognito-identity-js 库,看看我是否可以让 ES6 箭头函数在这里工作。不得不解决这个问题真的很烦人。

向 Apolozeus 求助

关于javascript - AWS Cognito 身份验证返回错误 - Javascript SDK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52350509/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com