我正在构建一个使用AWS Cognito制作用户帐户的应用程序。在大多数情况下,我都能使它正常工作,我已经成功创建了所有必要的类和处理程序,以创建和验证用户,并且仅对其他所有内容进行处理。但是,我似乎仅在尝试在创建帐户后立即登录用户时才遇到这个奇怪的问题。
com.amazonaws.mobileconnectors.cognitoidentityprovider.exceptions.CognitoInternalErrorException: Authentication failed due to an internal error
如果我重新启动应用程序,则可以正常登录,因此在创建帐户后立即登录是一个问题。这是非常不确定的,文档只是说“发生了内部错误。请重试您的请求,但是如果问题仍然存在,请通过在AWS论坛上发布消息与我们联系以获取详细信息。”您如何解决这个问题?
最佳答案
基本上,在创建账户并对其进行身份验证之后,在与AWS API相关的类之一中缓存了一些内容,仍然指向未经过身份验证的账户。仅当尝试在创建帐户后立即登录时才会发生此错误。就我而言,在大多数情况下,所有AWS Cognito API代码都包含在manager / helper类中,而我的是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
的情况下登录