Firebase异常处理通过电子邮件创建用户

时间:2016-06-12 16:09:39

标签: android firebase-authentication

如何处理新Firebase sdk中的错误以进行身份​​验证?在以前的版本中,我可以找到OnAuthenticationError方法,它会给出FirebaseException错误,但在新版本中我没有看到这样的方法。假设我通过电子邮件密码创建用户,由于某种原因发生异常。我可以看到获取此异常的唯一方法是task.getException.getMessage(),并且使用此消息我检查各种错误消息,然后依次获取发生的错误。如果我遗漏了某些东西,请建议一个更好的方法或纠正我

2 个答案:

答案 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
 }
}
});