Исключение FirebaseAuthInvalidCredentials при использовании «Одна учетная запись на адрес электронной почты»

… если вы не разрешаете нескольким учетным записям с тем же адресом электронной почты, пользователь не может создать новую учетную запись, которая подписывается с помощью учетной записи Google с адресом электронной почты ex@gmail.com, если уже есть учетная запись, которая подписывает Адрес электронной почты ex@gmail.com и пароль.

Я смог войти в систему с поставщиком Google для того же электронного письма, которое уже было зарегистрировано через поставщика электронной почты, поэтому поставщик Google заменил поставщика электронной почты, а последний не смог войти в систему с FirebaseAuthInvalidCredentialsException: пароль недействителен или у пользователя нет пароля. ,

Действия по воспроизведению:

Зарегистрируйтесь с помощью поставщика электронной почты -> Выйти -> Войти с поставщиком Google -> Выйти

В принципе, он не должен позволять заменять одного провайдера другим и бросать FirebaseAuthUserCollisionException: адрес электронной почты уже используется другой учетной записью.

Некоторый код, который я использую для входа / выхода:

public void signUpEmail(String email, String password) { mFirebaseAuth.createUserWithEmailAndPassword(email, password) .addOnCompleteListener(this, task -> { if (!task.isSuccessful()) { Log.e("signUpWithEmail", task.getException()); } }); } private void firebaseAuthWithGoogle(GoogleSignInAccount acct) { AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null); mFirebaseAuth.signInWithCredential(credential) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (!task.isSuccessful()) { Log.e("signInWithCredential", task.getException()); } } }); } public void signInEmail(String email, String password) { mFirebaseAuth.signInWithEmailAndPassword(email, password) .addOnCompleteListener(this, task -> { if (!task.isSuccessful()) { Log.e("signInWithEmail", task.getException()); } }); } public void signOut() { Auth.GoogleSignInApi.signOut(mGoogleApiClient); mFirebaseAuth.signOut(); startSignInActivity(); } 

Спасибо!

Solutions Collecting From Web of "Исключение FirebaseAuthInvalidCredentials при использовании «Одна учетная запись на адрес электронной почты»"

Несколько учетных записей на адрес электронной почты создадут нового пользователя с другим uid для разных поставщиков, используя тот же адрес электронной почты.

Чтобы воссоздать:

  1. Войдите в систему с помощью электронной почты google x @ x
  2. Войдите в систему с помощью электронной почты facebook x @ x
  3. Создать учетную запись пароля электронной почты x @ x

Теперь вы получите 3 разных пользователя.

Если вы используете строго рекомендуемые отдельные учетные записи для каждого электронного письма, 3 провайдера выше будут находиться в пределах одного пользователя (один uid).

Когда вы сначала создаете учетную запись google x @ x и пытаетесь войти в систему с новой учетной записью facebook с адресом электронной почты x @ x, вы получите сообщение об ошибке, которое требуется для продолжения связи. Затем вам нужно будет войти в первый пользователь Google и связать с ним нового пользователя facebook.

Для оптимизации шагов пользовательского интерфейса входа в систему и повышения безопасности учетной записи Firebase Authentication имеет концепцию «надежного поставщика», где поставщик удостоверений также является поставщиком услуг электронной почты. Например, Google является доверенным провайдером для адресов @ gmail.com, Yahoo является доверенным провайдером для адресов @ yahoo.com и адресов Microsoft for @ outlook.com.

В режиме «Один аккаунт на адрес электронной почты» Firebase Authentication пытается связать учетную запись на основе адреса электронной почты. Если пользователь входит в систему из доверенного провайдера, пользователь сразу же подписывается на учетную запись, так как мы знаем, что пользователь владеет адресом электронной почты.

Если существует существующая учетная запись с тем же адресом электронной почты, но с другими учетными данными (например, пароль или ненадежный поставщик), предыдущие учетные данные удаляются из соображений безопасности.

Фишер (который не является владельцем адреса электронной почты) может создать начальную учетную запись – удаление первоначальных учетных данных не позволит фишеру получить доступ к учетной записи впоследствии. Законный пользователь может настроить пароль, пройдя поток сброса пароля, где ей нужно будет доказать, что она владеет адресом электронной почты.