Как разрешить моему пользователю reset их пароль в пулах пользователей Cognito?

Итак, в моем приложении я, очевидно, хочу предоставить средства для пользователей reset своим паролям. Проблема, которая возникает у меня, заключается в том, что новая документация для пулов пользователей довольно неоднозначна по этой теме. Вот что они говорят вам сделать для потока "Забыли пароль" и ссылку, которую вы можете найти по адресу:

cognitoUser.forgotPassword({
        onSuccess: function (result) {
            console.log('call result: ' + result);
        },
        onFailure: function(err) {
            alert(err);
        },
        inputVerificationCode() {
            var verificationCode = prompt('Please input verification code ' ,'');
            var newPassword = prompt('Enter new password ' ,'');
            cognitoUser.confirmPassword(verificationCode, newPassword, this);
        }
    });

http://docs.aws.amazon.com/cognito/latest/developerguide/using-amazon-cognito-user-identity-pools-javascript-examples.html

Однако, когда я отбрасываю этот код в свой проект, где cognitoUser определен и подписан, ничего не происходит. Я понимаю, что мне нужно как-то интегрировать этот код с отправкой кода подтверждения пользователю и запросить у них новый пароль, но не могу найти ничего о том, как это сделать. Мысли?

Спасибо

Ответ 1

Сброс пароля с помощью пароля забытого пароля имеет два шага: 1) Запустите процесс, запросив код подтверждения из службы. Код будет доставлен на телефон пользователя/адрес электронной почты. 2) Установите новый пароль, используя код доставки.

Используйте эти две функции для выполнения вышеуказанных шагов и reset пароль: 1) cognitoUser.forgotPassword(): Это запустит процесс обработки забытых паролей. Служба генерирует код подтверждения и отправляет его пользователю. "Данные", возвращенные через callback.inputVerificationCode(данные), указывают, куда был отправлен код проверки. 2) cognitoUser.confirmPassword(): используйте поставляемый код подтверждения с этой функцией, чтобы установить новый пароль.

Ответ 2

Документация AWS ужасна на эту тему (Cognito). Вам в основном нужно настроить cognitoUser, затем вызвать forgotPassword

export function resetPassword(username) {
    // const poolData = { UserPoolId: xxxx, ClientId: xxxx };
    // userPool is const userPool = new AWSCognito.CognitoUserPool(poolData);

    // setup cognitoUser first
    cognitoUser = new AWSCognito.CognitoUser({
        Username: username,
        Pool: userPool
    });

    // call forgotPassword on cognitoUser
    cognitoUser.forgotPassword({
        onSuccess: function(result) {
            console.log('call result: ' + result);
        },
        onFailure: function(err) {
            alert(err);
        },
        inputVerificationCode() { // this is optional, and likely won't be implemented as in AWS example (i.e, prompt to get info)
            var verificationCode = prompt('Please input verification code ', '');
            var newPassword = prompt('Enter new password ', '');
            cognitoUser.confirmPassword(verificationCode, newPassword, this);
        }
    });
}

// confirmPassword can be separately built out as follows...  
export function confirmPassword(username, verificationCode, newPassword) {
    cognitoUser = new AWSCognito.CognitoUser({
        Username: username,
        Pool: userPool
    });

    return new Promise((resolve, reject) => {
        cognitoUser.confirmPassword(verificationCode, newPassword, {
            onFailure(err) {
                reject(err);
            },
            onSuccess() {
                resolve();
            },
        });
    });
}

Ответ 3

У меня была такая же проблема. Был способен работать через него с помощью confirmPassword() следующим образом.

//validation of input from form
req.checkBody('email', 'Username is required').notEmpty();
req.checkBody('password', 'Password is required').notEmpty();
req.checkBody('confirmationcode', 'Confirmation Code is required').notEmpty();


var confirmationCode = req.body.confirmationcode;
var password = req.body.password;
var userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData);


var userData = {
    Username: req.body.email,
    Pool: userPool
};
var cognitoUser = new AmazonCognitoIdentity.CognitoUser(userData);

cognitoUser.confirmPassword(confirmationCode, password, {
    onFailure(err) {
        console.log(err);
    },
    onSuccess() {
        console.log("Success");
    },
});

Ответ 4

Есть ли способ контролировать отправку кода подтверждения самостоятельно? Мой сервис поддерживает несколько языков, поэтому электронное письмо должно быть отправлено на языке пользователя. Кроме того, я хотел бы проконтролировать формулировку письма, содержащего код подтверждения.

Возможно ли это?

По сути, я хотел бы получить код подтверждения от AWS, а затем нести ответственность за отправку электронного письма пользователю. Это возможно?

заранее спасибо