如何处理新Firebase sdk中的错误以进行身份验证?在以前的版本中,我可以找到OnAuthenticationError方法,它会给出FirebaseException错误,但在新版本中我没有看到这样的方法。假设我通过电子邮件密码创建用户,由于某种原因发生异常。我可以看到获取此异常的唯一方法是task.getException.getMessage(),并且使用此消息我检查各种错误消息,然后依次获取发生的错误。如果我遗漏了某些东西,请建议一个更好的方法或纠正我
答案 0 :(得分:1)
在新的Firebase中,很多方法都返回了所谓的Task
。如果你以前在JavaScript中使用过promises,那么你会发现它们非常相似。
在任务上,您可以获得一些回调:
在您的情况下,您正在寻找creating a user中的失败,所以:
auth.createUserWithEmailAndPassword(email, password)
.addOnFailureListener(new OnFailureListener() {
public void onFailure(@NonNull Exception e) {
Log.e(TAG, "Unable to create user", e);
}
});
该异常将是FirebaseAuthException
的子类,这意味着您可以在其上调用getErrorCode()
。这将返回错误代码。它确实是一个字符串,但是格式为auth/error
,可以在切换案例中轻松捕获。
另请参阅documentation on creating a user以获取使用完成侦听器的示例。
答案 1 :(得分:1)
主要例外:
firebaseAuth.createUserWithEmailAndPassword(email, pass )
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful())
{
//--If success
}else if (task.getException() instanceof FirebaseAuthUserCollisionException)
{
//If email already registered.
}else if (task.getException() instanceof FirebaseAuthInvalidCredentialsException) {
//If email are in incorret format
}else if (task.getException() instanceof FirebaseAuthWeakPasswordException) {
//if password not 'stronger'
}else
{
//OTHER THING
}
}
});