身份验证失败FireBase Android
我正在使用Firebase身份验证中的身份验证失败FireBase Android,android,firebase,firebase-authentication,Android,Firebase,Firebase Authentication,我正在使用Firebase身份验证中的createAccount()方法,并附加了两个侦听器: addOnSuccessListener和addOnFailureListener 当我创建一个帐户,同时失去internet连接时,该帐户被成功创建(我可以在Firebase控制台中看到),而onFailure侦听器被调用 另外,当我创建此帐户时,我正在Firestore中保存一个用户对象,其中包含一个从auth方法异步调用的任务。问题是,由于之前的故障,该用户从未在Firestore数据库中创建,
createAccount()
方法,并附加了两个侦听器:
addOnSuccessListener
和addOnFailureListener
onFailure
侦听器被调用任务。问题是,由于之前的故障,该用户从未在Firestore数据库中创建,但仍然拥有身份验证帐户
firebaseAPI.createAccount(email, password, userName).addOnSuccessListener(new OnSuccessListener<AuthResult>() {
@Override
public void onSuccess(AuthResult authResult) {
System.out.println("onSuccess: the firebase user is not null.");
final FirebaseUser currentUser = authResult.getUser();
if (currentUser != null) {
// Send an email to verify the new account created
currentUser.sendEmailVerification()
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
System.out.println("onSuccess: email verification has been sent.");
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
System.out.println("onFailure: failed to send the emailVerification.");
System.out.println("onFailure: " + e.getMessage());
}
});
System.out.println("onComplete: registering the username.");
// Update the display name of the firebaseUser object
final UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder().setDisplayName(userName).build();
currentUser.updateProfile(profileUpdates).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
System.out.println("onFailure: " + e.getMessage());
System.out.println("onFailure: failed to update the user display name.");
}
}).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
System.out.println("onSuccess: display name updated.");
System.out.println("onSuccess: writing batch.");
String uid = currentUser.getUid();
// Fields to register in Firestore Database.
final User userToRegister = new User(uid, userName, email, birthDate, lastName, firstName);
// Register the Username in Firestore Database & the user as the same time to rollback everything if something happens.
firebaseAPI.createUser(userToRegister, uid).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
System.out.println("onSuccess: logging the user in.");
onSignUpSuccess(userToRegister);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
System.out.println("onFailure: " + e.getMessage());
System.out.println("onFailure: sending error to the activity");
if (e.getMessage().contains("offline") || e.getMessage().contains("internal error")) {
onSignUpError(SignUpErrorType.INTERNET_FAILED);
}
else {
onSignUpError(SignUpErrorType.GENERIC_ERROR);
}
deleteUser(currentUser);
}
}).addOnCanceledListener(new OnCanceledListener() {
@Override
public void onCanceled() {
System.out.println("onCanceled: batch canceled.");
onSignUpError(SignUpErrorType.GENERIC_ERROR);
deleteUser(currentUser);
}
});
}
});
}
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
System.out.println("onFailure: " + e.getMessage());
if (e.getMessage().contains("internal error") || e.getMessage().contains("network error")) {
// equals("An internal error has occurred. [ 7: ]")
System.out.println("onFailure: sending error to the activity");
onSignUpError(SignUpErrorType.INTERNET_FAILED);
} else if (e.getMessage().contains("mail")){
System.out.println("onFailure: sending error to the activity");
System.out.println("onFailure: error is : " + e.getMessage());
onSignUpError(SignUpErrorType.EMAIL_ALREADY_TAKEN);
}
else {
System.out.println("onFailure: error is : " + e.getMessage());
onSignUpError(SignUpErrorType.GENERIC_ERROR);
}
}
});
如果您的失败监听器被触发,那么您应该记录它提供的异常,以找出哪里出了问题。请编辑该问题,以包含其错误消息以及您正在使用的代码。问题不是错误,我故意在适当的时间关闭了internet连接,以模拟任何用户可能发生的错误。问题是发生这种情况时如何处理。(我还感到惊讶的是,OnSuccess和OnFailure都是为同一个任务调用的)
I/System.out: onFailure: A network error (such as timeout, interrupted connection or unreachable host) has occurred.