2017-03-03 26 views
0

我正在構建應用程序,使用AWS Cognito創建用戶帳戶。我可以在大多數時間使它工作得很好,我已經成功地創建了所有必需的類和處理程序來創建和驗證用戶,並且緊靠所有其他事物。但是,我似乎遇到了這個奇怪的問題,只有當他們的帳戶創建後立即嘗試簽署用戶。AWS CognitoInternalErrorException

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

如果我重新啓動應用程序,我可以登錄就好了,所以它與右簽約問題的帳戶創建後。這是非常不明確的,文檔只是說:「發生了內部錯誤,請重試您的請求,但如果問題仍然存在,請通過在AWS論壇上發佈消息與我們聯繫。」你如何解決這個問題?

回答

1

基本上,在您創建帳戶並對其進行身份驗證之後,仍會在某個AWS API相關類中緩存某些內容,這些類仍然指向未通過身份驗證的帳戶。只有在帳戶創建後立即登錄時纔會出現此錯誤。在我的情況下,在大多數情況下,所有AWS Cognito API代碼都包含在管理器/幫助器類中,我的代碼是AWSHelper類。爲了解決這個問題,在我的Handler中確認用戶之後,我簡單地在我的活動中重新創建了AWSHelper,並且我能夠很好地登錄。

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(); 
     } 
    }; 

在我的MainActivity,我有以下方法

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

此外,我沒有檢查,但我想,如果你嘗試之後的onSuccess()方法完全的CognitoUser會在用戶登錄無需登錄即可更新和登錄CognitoInternalErrorException