web-dev-qa-db-fra.com

Comment permettre à mon utilisateur de réinitialiser son mot de passe sur les pools d'utilisateurs Cognito?

Donc, dans mon application, je veux évidemment fournir aux utilisateurs les moyens de réinitialiser leurs mots de passe. Le problème que je rencontre est que la nouvelle documentation pour les pools d'utilisateurs est assez ambiguë sur ce sujet. Voici ce qu'ils vous disent de faire pour un flux de mot de passe oublié, et le lien que vous pouvez trouver sur:

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

Cependant, lorsque je dépose ce code dans mon projet où un cognitoUser est défini et connecté, rien ne semble se produire. Je comprends que je dois en quelque sorte intégrer ce code en envoyant un code de vérification à l'utilisateur et en lui demandant un nouveau mot de passe, mais je ne trouve rien sur la façon de le faire. Pensées?

Merci

21
Mark Keane

La réinitialisation du mot de passe avec un flux de mot de passe oublié comporte deux étapes:

  1. Démarrez le processus en demandant un code de vérification au service. Un code sera envoyé au téléphone/e-mail de l'utilisateur.
  2. Définissez le nouveau mot de passe à l'aide du code de vérification fourni.

Utilisez ces deux fonctions pour effectuer les étapes ci-dessus et réinitialiser le mot de passe:

  1. cognitoUser.forgotPassword() : Cela lancera le flux de processus de mot de passe oublié. Le service génère un code de vérification et l'envoie à l'utilisateur. Les "données", renvoyées via callback.inputVerificationCode (données), indiquent où le code de vérification a été envoyé.

  2. cognitoUser.confirmPassword() : Utilisez le code de vérification fourni avec cette fonction pour définir un nouveau mot de passe.

11
M Reddy

Les documents d'AWS sont terribles sur ce sujet (Cognito). Vous devez essentiellement configurer cognitoUser, puis appeler 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's 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();
            },
        });
    });
}
40
user1322092

J'ai eu ce même problème. A pu le résoudre en utilisant confirmPassword () de la manière suivante.

//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");
    },
});
6
gabriel