How to catch a Firebase Auth specific exceptions

前端 未结 16 2312
慢半拍i
慢半拍i 2020-11-28 04:37

Using Firebase, how do I catch a specific exception and tell the user gracefully about it? E.g :

FirebaseAuthInvalidCredentialsException: The email ad

16条回答
  •  一整个雨季
    2020-11-28 05:31

    There are a number of exceptions associated with firebase auth. In addition to @kingspeech

    You should use ((FirebaseAuthException)task.getException()).getErrorCode() to get the type of error and then handle it in switch like this :

    private void loginUser(String email, String password) {
    
            mAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener() {
    
                @Override
                public void onComplete(@NonNull Task task) {
    
                    if (task.isSuccessful()) {
    
                        startActivity(new Intent(MainActivity.this, Main2Activity.class));
    
                    } else {
    
                        String errorCode = ((FirebaseAuthException) task.getException()).getErrorCode();
    
                        switch (errorCode) {
    
                            case "ERROR_INVALID_CUSTOM_TOKEN":
                                Toast.makeText(MainActivity.this, "The custom token format is incorrect. Please check the documentation.", Toast.LENGTH_LONG).show();
                                break;
    
                            case "ERROR_CUSTOM_TOKEN_MISMATCH":
                                Toast.makeText(MainActivity.this, "The custom token corresponds to a different audience.", Toast.LENGTH_LONG).show();
                                break;
    
                            case "ERROR_INVALID_CREDENTIAL":
                                Toast.makeText(MainActivity.this, "The supplied auth credential is malformed or has expired.", Toast.LENGTH_LONG).show();
                                break;
    
                            case "ERROR_INVALID_EMAIL":
                                Toast.makeText(MainActivity.this, "The email address is badly formatted.", Toast.LENGTH_LONG).show();
                                etEmail.setError("The email address is badly formatted.");
                                etEmail.requestFocus();
                                break;
    
                            case "ERROR_WRONG_PASSWORD":
                                Toast.makeText(MainActivity.this, "The password is invalid or the user does not have a password.", Toast.LENGTH_LONG).show();
                                etPassword.setError("password is incorrect ");
                                etPassword.requestFocus();
                                etPassword.setText("");
                                break;
    
                            case "ERROR_USER_MISMATCH":
                                Toast.makeText(MainActivity.this, "The supplied credentials do not correspond to the previously signed in user.", Toast.LENGTH_LONG).show();
                                break;
    
                            case "ERROR_REQUIRES_RECENT_LOGIN":
                                Toast.makeText(MainActivity.this, "This operation is sensitive and requires recent authentication. Log in again before retrying this request.", Toast.LENGTH_LONG).show();
                                break;
    
                            case "ERROR_ACCOUNT_EXISTS_WITH_DIFFERENT_CREDENTIAL":
                                Toast.makeText(MainActivity.this, "An account already exists with the same email address but different sign-in credentials. Sign in using a provider associated with this email address.", Toast.LENGTH_LONG).show();
                                break;
    
                            case "ERROR_EMAIL_ALREADY_IN_USE":
                                Toast.makeText(MainActivity.this, "The email address is already in use by another account.   ", Toast.LENGTH_LONG).show();
                                etEmail.setError("The email address is already in use by another account.");
                                etEmail.requestFocus();
                                break;
    
                            case "ERROR_CREDENTIAL_ALREADY_IN_USE":
                                Toast.makeText(MainActivity.this, "This credential is already associated with a different user account.", Toast.LENGTH_LONG).show();
                                break;
    
                            case "ERROR_USER_DISABLED":
                                Toast.makeText(MainActivity.this, "The user account has been disabled by an administrator.", Toast.LENGTH_LONG).show();
                                break;
    
                            case "ERROR_USER_TOKEN_EXPIRED":
                                Toast.makeText(MainActivity.this, "The user\\'s credential is no longer valid. The user must sign in again.", Toast.LENGTH_LONG).show();
                                break;
    
                            case "ERROR_USER_NOT_FOUND":
                                Toast.makeText(MainActivity.this, "There is no user record corresponding to this identifier. The user may have been deleted.", Toast.LENGTH_LONG).show();
                                break;
    
                            case "ERROR_INVALID_USER_TOKEN":
                                Toast.makeText(MainActivity.this, "The user\\'s credential is no longer valid. The user must sign in again.", Toast.LENGTH_LONG).show();
                                break;
    
                            case "ERROR_OPERATION_NOT_ALLOWED":
                                Toast.makeText(MainActivity.this, "This operation is not allowed. You must enable this service in the console.", Toast.LENGTH_LONG).show();
                                break;
    
                            case "ERROR_WEAK_PASSWORD":
                                Toast.makeText(MainActivity.this, "The given password is invalid.", Toast.LENGTH_LONG).show();
                                etPassword.setError("The password is invalid it must 6 characters at least");
                                etPassword.requestFocus();
                                break;
    
                        }
                    }
                }
            });
        }
    

提交回复
热议问题