0

also arbeite ich mit AWS cognito, und ich bin ein bisschen verwirrt, wie man das Passwort bekommen?Wie bekomme ich ein Passwort von aws cognito - android?

Wenn ein Benutzer ein Passwort in einen Bearbeitungstext eingibt, wie erhalte ich das Passwort, das der Benutzer bei der Anmeldung eingegeben hat, damit ich das Passwort mit dem registrierten Passwort vergleichen kann?

Hier ist der Code ich mein Benutzer registrieren musste:

userPool.signUpInBackground(username_ET.getText().toString(), password_ET.getText().toString(), userAttributes, null, signupCallback); 

Und hier ist der Code, den ich verwendet, um sich einzuloggen:

private AuthenticationHandler authenticationHandler = new AuthenticationHandler() 
    { 
     @Override 
     public void onSuccess(CognitoUserSession userSession, CognitoDevice newDevice) 
     { 
      Log.d(COGNITO_LOGIN,"Login success I think?!"); 
      cognitoUser.getDetailsInBackground(getDetailsHandler); 
      //Here i need to compare passwords before i can move on. 
     } 
     @Override 
     public void getAuthenticationDetails(AuthenticationContinuation authenticationContinuation, String userId) 
     { 
      Log.d(COGNITO_LOGIN,passwordET.getText().toString()); 
      // The API needs user sign-in credentials to continue 
      AuthenticationDetails authenticationDetails = new AuthenticationDetails(userId, passwordET.getText().toString(), null); 

      // Pass the user sign-in credentials to the continuation 
      authenticationContinuation.setAuthenticationDetails(authenticationDetails); 

      // Allow the sign-in to continue 
      authenticationContinuation.continueTask(); 
     } 
     @Override 
     public void getMFACode(MultiFactorAuthenticationContinuation multiFactorAuthenticationContinuation) { 
      // Multi-factor authentication is required; get the verification code from user 
      multiFactorAuthenticationContinuation.setMfaCode("verificationCode"); 
      // Allow the sign-in process to continue 
      multiFactorAuthenticationContinuation.continueTask(); 
     } 
     @Override 
     public void authenticationChallenge(ChallengeContinuation continuation) { 
     } 
     @Override 
     public void onFailure(Exception exception) 
     { 
      // Sign-in failed, check exception for the cause 
      Log.d(COGNITO_LOGIN,"Login failed!"); 
      Log.d(COGNITO_LOGIN,exception.getMessage()); 
      exceptionMessage(exception.getMessage()); 
     } 
    }; 



cognitoUser.getSessionInBackground(authenticationHandler); 

Mit dem Authentifizierungs-Handler, ich muss nur passieren im richtigen Benutzernamen (oder userID), um den onSuccess auszuführen. Passwort ist nicht einmal erforderlich. Also ich bin verwirrt, wo der Benutzer auch das richtige Passwort eingeben muss, damit sie sich einloggen.

+1

Ich bin mir nicht sicher, ob ich das verstehe. Sie geben das Passwort in dem gerade angegebenen Code ein. Wenn Sie AuthenticationDetails erstellen und zur Fortsetzung hinzufügen. Was genau ist deine Frage? – doorstuck

+0

@doorstuck Ja, ich habe das Passwort angegeben, aber die Log-Anweisung in 'getgetAuthenticationDetails' wird nicht ausgeführt. und wenn ich ein falsches Passwort einlogge, loggt es sich trotzdem ein – TheQ

+0

versuche, das Abmelden anzurufen oder die App neu zu installieren. Dann werden die Anmeldeinformationen nicht gespeichert und das Passwort wird mit der Methode 'getAuthenticationDetails' abgefragt. – doorstuck

Antwort

1

Sie müssen keine Passwörter vergleichen. Wenn Sie sich anmelden, speichert Cognito ein Salz und einen Verifizierer für das Passwort, mit dem Sie sich angemeldet haben. Cognito speichert Ihr Passwort nicht in der Form, in der Sie es eingegeben haben, sondern nur in einem Salt und Verifier. Wenn Sie den folgenden Code verwenden, verwendet Cognito das Secure Remote Password-Protokoll, um den intern gespeicherten Verifier abzugleichen. Da wir das von Ihnen angegebene Kennwort für Berechnungen verwenden, können Sie es nicht abrufen. Beachten Sie, dass Sie im onSuccess-Callback Token erhalten, wenn der Anruf wie unten beschrieben erfolgreich ist.

// Callback handler for the sign-in process 
AuthenticationHandler authenticationHandler = new AuthenticationHandler() { 

    @Override 
    public void onSuccess(CognitoUserSession cognitoUserSession) { 
     // Sign-in was successful, cognitoUserSession will contain tokens for the user 
    } 

    @Override 
    public void getAuthenticationDetails(AuthenticationContinuation authenticationContinuation, String userId) { 
     // The API needs user sign-in credentials to continue 
     AuthenticationDetails authenticationDetails = new AuthenticationDetails(userId, password, null); 

     // Pass the user sign-in credentials to the continuation 
     authenticationContinuation.setAuthenticationDetails(authenticationDetails); 

     // Allow the sign-in to continue 
     authenticationContinuation.continueTask(); 
    } 

    @Override 
    public void getMFACode(MultiFactorAuthenticationContinuation multiFactorAuthenticationContinuation) { 
     // Multi-factor authentication is required, get the verification code from user 
     multiFactorAuthenticationContinuation.setMfaCode(mfaVerificationCode); 
     // Allow the sign-in process to continue 
     multiFactorAuthenticationContinuation.continueTask(); 
    } 

    @Override 
    public void onFailure(Exception exception) { 
     // Sign-in failed, check exception for the cause 
    } 
}; 

// Sign-in the user 
cognitoUser.getSessionInBackground(authenticationHandler); 
+0

Vielen Dank für die Antwort. Schätze das. Ich habe eine andere Frage. Wenn der Benutzer das Passwort vergisst, wie würden Sie damit umgehen, dass ich weiß: 'user.forgotPasswordInBackground (new ForgotPasswordHandler ...)'. Aber, ich denke, es soll mir irgendwie einen anderen Bestätigungscode schicken, wie bekomme ich diesen Code. Ich habe eine detaillierte Version dieser Frage hier veröffentlicht: http://stackoverflow.com/questions/41646278/forgot-password-in-aws-cognito-android – TheQ

+0

Ja, Sie sollten einen Code erhalten, wenn Sie eine verifizierte E-Mail-Adresse oder Telefonnummer haben wenn du Passwort vergessen hast. –

+0

Sobald der Benutzer angemeldet ist, neigt getSession dazu, auch dann erfolgreich zu sein, wenn das Kennwort falsch übergeben wurde. Was ist, wenn wir in der App den Benutzer verifizieren müssen, um etwas Kritisches ändern zu können? Wie können wir überprüfen, ob das eingegebene Passwort korrekt ist? – desidigitalnomad