【问题标题】:Getting "FirebaseAuthInvalidCredentialsException: The email address is badly formatted." when authenticating with Firebase获取“FirebaseAuthInvalidCredentialsException:电子邮件地址格式错误。”使用 Firebase 进行身份验证时
【发布时间】:2019-11-18 19:27:16
【问题描述】:

我正在尝试为我的应用创建登录和注册页面。但是当我运行代码时,应用程序崩溃了。

这是错误:

main
    Process: in.testprepindia, PID: 2884
    com.google.android.gms.tasks.RuntimeExecutionException: com.google.firebase.auth.FirebaseAuthInvalidCredentialsException: The email address is badly formatted.
        at com.google.android.gms.tasks.zzu.getResult(Unknown Source:15)
        at in.testprepindia.RegistrationActivity$3.onComplete(RegistrationActivity.java:190)
        at com.google.android.gms.tasks.zzj.run(Unknown Source:4)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7076)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)
     Caused by: com.google.firebase.auth.FirebaseAuthInvalidCredentialsException: The email address is badly formatted.
        at com.google.firebase.auth.api.internal.zzdr.zzb(Unknown Source:30)
        at com.google.firebase.auth.api.internal.zzeu.zza(Unknown Source:16)
        at com.google.firebase.auth.api.internal.zzen.zzc(Unknown Source:33)
        at com.google.firebase.auth.api.internal.zzep.onFailure(Unknown Source:49)
        at com.google.firebase.auth.api.internal.zzdx.dispatchTransaction(Unknown Source:18)
        at com.google.android.gms.internal.firebase_auth.zza.onTransact(Unknown Source:13)
        at android.os.Binder.execTransact(Binder.java:739)

这是我认为造成麻烦的代码:

private void compareData() {
        firebaseAuth.fetchSignInMethodsForEmail(newEmail.getText().toString()).addOnCompleteListener(new OnCompleteListener<SignInMethodQueryResult>() {
            @Override
            public void onComplete(@NonNull Task<SignInMethodQueryResult> task) {
                boolean check = !task.getResult().getSignInMethods().isEmpty();

                if(!check){
                    String user_email = newEmail.getText().toString().trim();
                    String user_password = newPassword.getText().toString().trim();

                    // firebase authentication started

                    firebaseAuth.createUserWithEmailAndPassword(user_email, user_password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {
                            if (task.isSuccessful()) {
                                Toast.makeText(RegistrationActivity.this, "Successful", Toast.LENGTH_SHORT).show();
                                startActivity(new Intent(RegistrationActivity.this, MainActivity.class));

                            }
                            else{
                                Toast.makeText(RegistrationActivity.this, "unsuccessful", Toast.LENGTH_SHORT).show();
                            }
                        }
                    });
                    // firebase authentication ended

                } //if Ended
                //else started
                else {
                    Toast.makeText(RegistrationActivity.this, "Email already present", Toast.LENGTH_SHORT).show();
                }
                //else ended
            }
        });
    }

我希望代码首先分析已存在用户的 Editext 视图,然后运行代码来注册用户。但这是我得到的错误。

【问题讨论】:

    标签: android firebase firebase-authentication


    【解决方案1】:

    使用以下代码通过 Google 电子邮件进行身份验证:

    firebaseauth = FirebaseAuth.getInstance();
            //auth state listener
            statelistener = new FirebaseAuth.AuthStateListener() {
                @Override
                public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
                    FirebaseUser user = firebaseAuth.getCurrentUser(); //firebaseAuth takes sign_in or sign_out params.
    
                    if(user != null)
                    {
    //your code for if already logged in
    }
    
     else
                    {
                        startActivityForResult(
                                AuthUI.getInstance()
                                        .createSignInIntentBuilder()
                                        .setIsSmartLockEnabled(false)
                                        .setAvailableProviders(Arrays.asList(
                                                new AuthUI.IdpConfig.EmailBuilder().build(),
                                                new AuthUI.IdpConfig.GoogleBuilder().build()))
                                        .build(),
                                RC_SIGN_IN);
                    }
    

    【讨论】:

    • 谢谢,但我想做的是验证用户输入的电子邮件是否已经在 firebase 数据库中(身份验证)。
    • 我已经把FireBase的邮箱验证码放好了。
    【解决方案2】:

    为了避免崩溃,您需要在 fetchSignInMethodsForEmail 方法中检查 task.isSuccessful()。

    if (task.isSuccessful()) {    
    }
    

    代码示例,

        firebaseAuth.fetchSignInMethodsForEmail(newEmail.getText().toString()).addOnCompleteListener(new OnCompleteListener<SignInMethodQueryResult>() {
        @Override
        public void onComplete(@NonNull Task<SignInMethodQueryResult> task) {
            if (task.isSuccessful()) {
                //your code
                boolean check = !task.getResult().getSignInMethods().isEmpty();
                // Your code
                /*if (!check) {
                    String user_email = newEmail.getText().toString().trim();
                    String user_password = newPassword.getText().toString().trim();
                    .
                    .
                    .
    
                    */
            } else {
                Log.e(TAG, "Error getting sign in methods for user", task.getException());
            }
        }
    });
    

    并尝试在使用 android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches() 发送到 firebase 之前验证电子邮件

    【讨论】:

    • 非常感谢。它解决了应用程序崩溃问题。 FirebaseAuthInvalidCredentials 异常是由于对电子邮件使用纯文本而发生的。我将文本类型更改为电子邮件,效果很好
    猜你喜欢
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-09
    • 2019-05-01
    • 1970-01-01
    相关资源
    最近更新 更多