У меня есть возможность, что пользователь может выбрать, хотят ли они войти в систему с помощью Google, Facebook, электронной почты/пароля и т. д.
После тестирования моего приложения произошло следующее:
После некоторых исследований я пришел к Связать несколько поставщиков аутентификации с учетной записью в документации по Android
Я понял, что мне нужно реорганизовать свой код, чтобы не использовать методы FirebaseAuth.signInWith.
Это немного кроме моего логинаEmailAndPassword:
val credential = EmailAuthProvider.getCredential(email, password)
firebaseAuth.currentUser!!.linkWithCredential(credential).addOnCompleteListener{ authTask: Task<AuthResult> ->
if (authTask.isSuccessful) {
У меня есть «иначе», означающее, что (authTask.isSuccessful) не произошло, и еще одно «если» с FirebaseAuthUserCollisionException
val exception: java.lang.Exception? = authTask.exception
if (exception is FirebaseAuthUserCollisionException) {
linkAndMerge(credential)
Моя цель - связать и объединить, и я не знаю, как связать учетные записи (и электронная почта серая, и Google на Firebase)
private fun linkAndMerge(credential: AuthCredential) {
val authenticatedUserMutableLiveData: MutableLiveData<ResponseState<UserModel>> =
MutableLiveData()
val prevUser = firebaseAuth.currentUser
firebaseAuth.signInWithCredential(credential)
.addOnSuccessListener { result ->
val currentUser = result.user
// Merge prevUser and currentUser accounts and data
// ...
}
.addOnFailureListener {
authenticatedUserMutableLiveData.value = ResponseState.Error("Error")
}
}
Мои вопросы:
Шаги с 1 по 9 обеспечивают ожидаемое поведение. Если вы создадите пользователя с адресом электронной почты и паролем и сразу после этого войдете в систему с помощью Google, учетная запись будет доступна только с помощью Google. Почему? Потому что за кулисами Firebase преобразует учетную запись, созданную с адресом электронной почты и паролем, в учетную запись поставщика Google. К сожалению, вы не можете отменить это изменение.
Ссылка в вашем вопросе относится к возможности привязать существующую учетную запись к определенному провайдеру. Например, если вы реализуете анонимную аутентификацию , вы можете связать этот аккаунт, например, с Google. Это означает, что UID остается прежним.
Если вы хотите, чтобы этот механизм не работал, вам следует рассмотреть возможность создания разных учетных записей для разных поставщиков. Вы можете найти эту опцию, которая называется «Создать несколько учетных записей для каждого поставщика удостоверений» прямо в консоли Firebase, на вкладке «Настройки» внутри «Аутентификации».
После твоего выступления все обрело смысл. Я уже делаю некоторые изменения в логике входа. Спасибо.
Могу ли я помочь вам с другой информацией?