【问题标题】:Is it possible to detect FirebaseAuthUserCollisionException when use FirebaseAuth?使用 FirebaseAuth 时是否可以检测到 FirebaseAuthUserCollisionException?
【发布时间】:2018-09-24 14:04:22
【问题描述】:

当我尝试使用 FirebaseAuth 在我的应用中创建新帐户[电子邮件、密码]时遇到了一些问题。我想检测电子邮件是否已在其他帐户中使用。例如,我想在我的应用程序中创建帐户 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)

【问题讨论】:

标签: android firebase firebase-authentication


【解决方案1】:

也许这个链接会有所帮助

Dealing with Email address already in use - Firebase Authentication

@alex mamo 回答

第一个是验证电子邮件地址是否存在,然后显示一条消息。这正是你所说的。消息由您决定。

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

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

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

希望对你有帮助。

【讨论】:

  • 非常抱歉。该链接对我有帮助,但仍然不是我接受的答案,因此我将其投票为有用而不是答案。我希望每封电子邮件都可以通过每个提供商进行身份验证。因此,一个电子邮件是一个帐户,但可以使用每个提供商登录。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-25
  • 2010-11-04
  • 2015-12-25
  • 2018-02-07
相关资源
最近更新 更多