2016-06-29 5 views
8

Also in meiner App möchte ich natürlich die Mittel für Benutzer bereitstellen ihre Kennwörter zurücksetzen. Das Problem, das ich habe, ist, dass die neue Dokumentation für Benutzer-Pools ziemlich zweideutig zu diesem Thema ist. Hier ist, was sie Ihnen sagen, für einen Passwort vergessen Fluss zu tun, und der Link es finden kann:Wie kann ich meinem Benutzer das Zurücksetzen seines Passworts in Cognito User Pools erlauben?

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

Jedoch, wenn ich diesen Code in meinem Projekt fallen, wo ein cognitoUser definiert ist und Eingeloggt, scheint nichts zu passieren. Ich verstehe, dass ich diesen Code irgendwie integrieren muss, indem ich einen Bestätigungscode an den Benutzer sende, und ihn nach einem neuen Passwort frage, aber nichts darüber finde, wie man das macht. Gedanken?

Dank

+0

Ich habe die gleiche genaue Frage. Dieser Code macht für mich überhaupt keinen Sinn. –

+0

Ich hoffe, jemand antwortet! –

+0

@ToddHoff Haben Sie zufällig ein Problem, bei dem sich Ihre Benutzer mit Benutzer-Pools von Mobilgeräten authentifizieren, wenn sie sich auf der Website befinden? Beide Fragen machen mich verrückt. –

Antwort

6

das Passwort zurücksetzen mit Passwort vergessen Fluss zwei Schritte hat: 1) für einen Verifizierungscode, den Prozess starten Sie vom Service anzufordern. Ein Code wird an das Telefon/die E-Mail des Benutzers gesendet. 2) Legen Sie das neue Passwort mit dem gelieferten Bestätigungscode fest.

Verwenden Sie diese beiden Funktionen, um die obigen Schritte auszuführen und das Passwort zurückzusetzen: 1) cognitoUser.forgotPassword(): Dies startet den Prozessablauf für das vergessene Passwort. Der Dienst generiert einen Bestätigungscode und sendet ihn an den Benutzer. Die "Daten", die über callback.inputVerificationCode (Daten) zurückgegeben werden, geben an, wo der Bestätigungscode gesendet wurde. 2) cognitoUser.confirmPassword(): Verwenden Sie den gelieferten Bestätigungscode mit dieser Funktion, um ein neues Passwort festzulegen.

+0

Scheint zu arbeiten. Vielen Dank! Was Sie oben eingegeben haben, sollte in der Dokumentation sein :) Vielleicht ist es, und ich konnte es einfach nicht finden! –

+0

Das hat bei mir nicht funktioniert. Ich habe eine Fehlermeldung erhalten, dass der Benutzer bereits bestätigt wurde. Gibt es einen weiteren Anruf, um die Bestätigung zuerst ungültig zu machen? –

20

Die Dokumente von AWS sind zu diesem Thema schrecklich (Cognito). Sie müssen grundsätzlich die Einrichtung cognitoUser, dann 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(); 
      }, 
     }); 
    }); 
} 
+0

Hallo, ich bekomme den folgenden Fehler, wenn ich versuche, das Passwort zu ändern, "InvalidParameterType: Expected params.Username, um eine Zeichenfolge zu sein" –

5

nenne ich das gleiche Problem hatte. War in der Lage, mit confirmPassword() auf folgende Weise zu arbeiten.

//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"); 
    }, 
}); 
+0

Danke dafür. Es hat mich verrückt gemacht! –