2016-06-29 12 views
8

W mojej aplikacji oczywiście chcę zapewnić użytkownikom możliwość resetowania ich haseł. Problemem, który mam, jest to, że nowa dokumentacja dla pul użytkowników jest dość niejednoznaczna na ten temat. Oto co mówią ci zrobić dla Zapomniałeś przepływu hasło, a link można znaleźć na stronie:Jak zezwolić użytkownikowi na resetowanie hasła w pulach użytkowników Cognito?

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

Jednak kiedy spadnie ten kod w moim projekcie gdzie cognitoUser jest zdefiniowane i zalogowani, nic się nie dzieje. Rozumiem, że muszę w jakiś sposób zintegrować ten kod z wysłaniem użytkownikowi kodu weryfikacyjnego i poprosić go o nowe hasło, ale nie mogę znaleźć niczego, jak to zrobić. Myśli?

Dzięki

+0

Mam dokładnie to samo pytanie. Ten kod nie ma dla mnie żadnego sensu. –

+0

Mam nadzieję, że ktoś odpowie! –

+0

@ ToddHoff czy przypadkiem wpadłeś w problem, który powoduje, że Twoi użytkownicy uwierzytelniają się w Puli Użytkownika z urządzeń mobilnych, gdy są na stronie? Oba te pytania doprowadzają mnie do szału. –

Odpowiedz

6

resetowania hasła ze zapomniał przepływu hasło ma dwa etapy: 1) rozpocząć proces przez prośbą o kod weryfikacyjny z serwisu. Kod zostanie dostarczony do telefonu/adresu e-mail użytkownika. 2) Ustaw nowe hasło za pomocą dostarczonego kodu weryfikacyjnego.

Użyj tych dwóch funkcji, aby wykonać powyższe kroki i zresetować hasło: 1) cognitoUser.forgotPassword(): Spowoduje to uruchomienie procesu zapomnianego hasła. Usługa generuje kod weryfikacyjny i wysyła go do użytkownika. "Dane", zwrócone przez callback.inputVerificationCode (dane), wskazują, gdzie kod weryfikacyjny został wysłany. 2) cognitoUser.confirmPassword(): Użyj dostarczonego kodu weryfikacyjnego z tą funkcją, aby ustawić nowe hasło.

+0

Wydaje się pracować, wielkie dzięki! To co wpisałeś powyżej powinno być w dokumentacji :) Może tak jest, a ja po prostu nie mogłem go znaleźć! –

+0

To nie działa dla mnie. Otrzymałem komunikat o błędzie z informacją, że użytkownik został już potwierdzony. Czy jest jeszcze jedno połączenie, aby najpierw unieważnić potwierdzenie? –

20

Dokumentacja AWS jest okropna na ten temat (Cognito). Zasadniczo należy ustawić cognitoUser, a następnie zadzwonić 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

Witam, pojawia się następujący błąd, gdy próbuję zmienić hasło, "InvalidParameterType: Oczekiwano params.Username na ciąg" –

5

miałem ten sam problem. Udało się to przeprowadzić za pomocą metody confirmPassword() w następujący sposób.

//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

Dzięki za to. To doprowadzało mnie do szaleństwa! –

Powiązane problemy