Я использую AWS Cognito для аутентификации пользователей в новом приложении, которое я создаю.
Я использую библиотеку amazon-cognito-identity-js
в своем проекте (ссылка на Github: https://github.com/aws-amplify/amplify-js/tree/master/packages/amazon-cognito-identity-js). Поскольку пользователи в этом конкретном пуле пользователей не могут зарегистрироваться - я регистрирую их вручную - я знаю, что мне нужно "Использовать" дело 23 ", как указано в README.md от Github.
Итак, мой код выглядит следующим образом:
...
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
, я теперь могу успешно получить объект result
с тремя присутствующими жетонами.
Так что я знаю, что все вроде работает, но не то, что я ожидаю.
Что вызывает эту ошибку? Как я могу это исправить? Я хочу получить объект result
немедленно, когда пользователь впервые войдет в систему с tempPassword
и их newPassword
, чтобы они могли начать использовать приложение.
EDIT:
Думать, что я должен забрать userAttributes
, было ошибкой. Функция newPasswordRequired
передает их автоматически. Поэтому я обновил свой код выше, добавив «Вариант использования 23», представленный на Github.
Но теперь я получаю немного другую ошибку, чем раньше:
Uncaught (in promise) TypeError: callback.onFailure is not a function
at eval (CognitoUser.js:572)
at eval (Client.js:108)
Все, что касается Cognito, все еще работает, но должно быть что-то не так с моей onFailure
функцией, что очень странно.
Есть мысли?
Заранее спасибо