Можно ли обнаружить FirebaseAuthUserCollisionException при использовании FirebaseAuth?

У меня есть некоторые проблемы, когда я пытаюсь создать новую учетную запись [адрес электронной почты, пароль] в моем приложении, используя FirebaseAuth. Я хочу определить, используется ли электронная почта в другой учетной записи. Например, я хочу создать учетную запись @ bc в своем приложении, но я уже использую это письмо для входа на Facebook. Итак, возможно ли обнаружить FirebaseAuthUserCollisionException в Firebase.

Это мой код

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)

2 ответа

Возможно эта ссылка поможет

Работа с уже используемым адресом электронной почты - Firebase Authentication

ответ @alex mamo

Первый - проверить, существует ли адрес электронной почты, а затем отобразить сообщение. Это именно то, что вы сказали. Сообщение зависит от вас.

Второй подход - дать пользователям возможность иметь несколько учетных записей на один адрес электронной почты. Другими словами, если пользователь подписывается с помощью Gmail, а затем подписывается с помощью Facebook, и у него тот же адрес электронной почты, то он в конечном итоге имеет 2 разных аккаунта. Один адрес электронной почты, 2 разных аккаунта. Это не очень хорошая практика, но в соответствии с вашими потребностями вы даже можете использовать ее.

Третий подход - иметь только один аккаунт на один адрес электронной почты. Это означает, что вы запрещаете пользователям создавать несколько учетных записей, используя один и тот же адрес электронной почты с разными поставщиками аутентификации. Это обычная практика, а также правило по умолчанию в консоли Firebase. Это означает, что вы захотите позже внедрить другой вид аутентификации с другим провайдером, он будет следовать тому же правилу. В этом случае будет один адрес электронной почты с одной учетной записью.

Чтобы включить или отключить эту опцию, перейдите в консоль Firebase, выберите "Аутентификация", перейдите на вкладку "МЕТОД ВХОДА" и в нижней части страницы вы найдете раздел "Дополнительно".

Надеюсь, поможет.

Если вы используете Kotlin, обязательно используйте:

      if (task.exception is FirebaseAuthUserCollisionException) 
{
    // Handle user collision exception here
    // ...
} 
else 
{
    // Handle other exceptions here
    // ...
}
Другие вопросы по тегам