Можно ли обнаружить 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
// ...
}