Firebase Auth - GoogleAuthProvider и FacebookAuthProvider заменяют EmailAuthProvider - PullRequest
2 голосов
/ 03 октября 2019

Шаги

  • Создать пользователя с помощью createUserWithEmailAndPassword
  • auth.signOut ()
  • Пользователь signInWithCredential с использованием FacebookAuthProvider или GoogleAuthProvider с тем же адресом электронной почты, который используется в createUserWithEmailAndAnd1008 *
  • Это выбрасывает FirebaseAuthUserCollisionException (Но этого не происходит, вместо этого signInWithCredential успешен и заменяет провайдера на Facebook или Google

Документация находится ниже

https://developers.google.com/android/reference/com/google/firebase/auth/FirebaseAuth.html#signInWithCredential(com.google.firebase.auth.AuthCredential)

Код

Создать пользователя

auth.createUserWithEmailAndPassword(email, password)
    .addOnSuccessListener {
        callBack.invoke(FirebaseAuthResult.Success)
    }.addOnFailureListener {
        val authResult = it.factoryExceptionAuthResult()
        callBack.invoke(authResult)
    }

signInWithCredential

auth.signInWithCredential(authCredential)
    .addOnSuccessListener {
       callBack.invoke(FirebaseAuthResult.Success)
    }.addOnFailureListener {
       val authResult = it.factoryExceptionAuthResult()
       callBack.invoke(authResult)
    }

Libs

implementation 'com.facebook.android:facebook-login:[5,6)'
implementation 'com.google.firebase:firebase-auth:19.1.0' 
implementation 'com.google.android.gms:play-services-auth:17.0.0'

1 Ответ

0 голосов
/ 12 октября 2019

Это ожидаемое поведение. Если для текущей электронной почты не существует типа учетных данных (Facebook, Google и т. Д.), Он будет создан и создаст сеанс пользователя. Он также переопределит и удалит другие типы учетных данных, такие как пароль, и если вы не хотите этого, вы можете проверить Link Multiple Auth Providers to an Account, чтобы увидеть, как связать и сохранить несколько поставщиков учетных данных.

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

Вы должны использовать signInWithEmailAndPassword, если вы хотите использовать только адрес электронной почты / пароль для входа в систему пользователя.

Вы также можете использовать fetchSignInMethodsForEmail для извлечения доступных методов ввода для каждого электронного письма.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...