使用FirebaseAuth时是否可以检测到FirebaseAuthUserCollisionException?

时间:2018-04-14 09:42:13

标签: android firebase firebase-authentication

当我尝试使用FirebaseAuth在我的应用中创建新帐户[email,password]时出现问题。我想检测电子邮件是否已在其他帐户中使用。例如,我想在我的应用程序中创建帐户a@b.c,但我已经使用此电子邮件通过Facebook登录。那么,是否可以在Firebase中检测到FirebaseAuthUserCollisionException。

这是我的代码。

mAuth.createUserWithEmailAndPassword(edt1.getText().toString(), edt2.getText().toString())
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        // Sign in success, update UI with the signed-in user's information
                        Log.d(TAG, "createUserWithEmail:success");
                        FirebaseUser user = mAuth.getCurrentUser();
                        startActivity( new Intent( NewRegisterForEmali.this, NewLoginActivity.class));
                        finish();
                    }else if(task.getException().equals("com.google.firebase.auth.FirebaseAuthUserCollisionException")){
                        Log.d(TAG, "Collision!");
                    } else {
                        // If sign in fails, display a message to the user.
                        Log.w(TAG, "createUserWithEmail:failure", task.getException());
                        Toast.makeText(NewRegisterForEmali.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                        task.getException();
                    }

                    // ...
                }
            });

logcat的:

com.google.firebase.auth.FirebaseAuthUserCollisionException: The email address is already in use by another account.
                                                                                        at com.google.android.gms.internal.zzeaw.zzaw(Unknown Source)
                                                                                        at com.google.android.gms.internal.zzdzu.zza(Unknown Source)
                                                                                        at com.google.android.gms.internal.zzebh.zzax(Unknown Source)
                                                                                        at com.google.android.gms.internal.zzebk.onFailure(Unknown Source)
                                                                                        at com.google.android.gms.internal.zzeay.onTransact(Unknown Source)
                                                                                        at android.os.Binder.execTransact(Binder.java:565)

1 个答案:

答案 0 :(得分:1)

也许这个链接会有所帮助

Dealing with Email address already in use - Firebase Authentication

由@alex mamo回答

第一个是验证电子邮件地址是否存在而不是显示消息。这正是你所说的。消息取决于您。

第二种方法是让用户每个电子邮件地址拥有多个帐户。换句话说,如果用户使用Gmail注册然后使用Facebook注册并且他拥有相同的电子邮件地址,那么他最终会拥有2个不同的帐户。一个电子邮件地址,两个不同的帐户这不是一个好习惯,但根据您的需要,您甚至可以使用它。

第三种方法是每个电子邮件地址只有一个帐户。这意味着您阻止用户使用具有不同身份验证提供程序的相同电子邮件地址创建多个帐户。这是一种常见做法,也是Firebase控制台中的默认规则。这意味着,您将希望稍后与另一个提供程序实现另一种身份验证,它将遵循相同的规则。在这种情况下,将只有一个帐户的电子邮件地址。

要启用或停用此选项,请转到Firebase控制台,选择身份验证,选择登录方式选项卡,然后在页面底部找到高级部分。

希望它有所帮助。