2017-03-03 8 views
0

Ich erstelle eine App, in der ich AWS Cognito zur Erstellung von Benutzerkonten verwende. Ich kann es die meiste Zeit gut funktionieren lassen, ich habe erfolgreich alle notwendigen Klassen und Handler erstellt, um Benutzer zu erstellen und zu authentifizieren und einfach alles andere anzugehen. Dieses seltsame Problem scheint mir NUR bei dem Versuch zu bestehen, einen Benutzer direkt nach der Erstellung seines Kontos zu unterschreiben.AWS CognitoInternalErrorException

com.amazonaws.mobileconnectors.cognitoidentityprovider.exceptions.CognitoInternalErrorException: Authentication failed due to an internal error 

Wenn ich die App neu zu starten, kann ich ganz gut melden Sie sich an, so dass es ein Problem mit der Unterzeichnung in Recht ist, nachdem ein Konto erstellt wurde. Es ist sehr unspezifisch und die Dokumentation sagt nur "Es ist ein interner Fehler aufgetreten. Versuchen Sie es erneut, aber wenn das Problem weiterhin besteht, kontaktieren Sie uns mit Details, indem Sie eine Nachricht in den AWS-Foren veröffentlichen." Wie kommst du dazu?

Antwort

1

Nachdem Sie ein Konto erstellt und authentifiziert haben, wird etwas in einer der AWS API-bezogenen Klassen zwischengespeichert, die darauf hinweist, dass das Konto nicht authentifiziert wurde. Dieser Fehler tritt nur auf, wenn Sie versuchen, sich sofort nach der Erstellung des Kontos anzumelden. In meinem Fall und in den meisten Fällen ist der gesamte AWS Cognito-API-Code in einer Manager-/Hilfsklasse enthalten, meine Klasse ist AWSHelper. Um dieses Problem zu umgehen, habe ich in meinem Handler, nachdem der Benutzer bestätigt wurde, einfach den AWSHelper in meiner Aktivität neu erstellt, und ich kann mich gut anmelden.

GenericHandler confirmationCallback = new GenericHandler() { 

     @Override 
     public void onSuccess() { 
      Log.w("DMJ", "user has been confirmed!"); 
      if (!mainActivity.updateAWS()) { 
       Toast.makeText(activity, "Account created! Please sign into your account", Toast.LENGTH_LONG).show(); 
       activity.changeFragment(new SignInFragment(), "SignInFragment"); 
      } else { 
       Toast.makeText(activity, "Account created!", Toast.LENGTH_LONG).show(); 
      } 
     } 

     @Override 
     public void onFailure(Exception exception) { 
      Log.w("DMJ", "confirmation got rekt m8"); 
      exception.printStackTrace(); 
     } 
    }; 

In meinem MainActivity habe ich die folgende Methode

public boolean updateAWS() { 
    awsHelper = new AWSHelper(this); 
    if (awsHelper.isSignedIn) { 
     changeFragment(new HomeScreenFragment(), "HomeScreenFragment"); 
     return true; 
    } 
    return false; 
} 

Auch ich habe nicht überprüft, aber ich vermute, wenn Sie in dem Benutzer nach dem der onSuccess() Methode vollständig zu unterschreiben versuchen, die CognitoUser wird aktualisiert werden und in der Lage sein, sich ohne die CognitoInternalErrorException

anzumelden
Verwandte Themen