[英]Link several user accounts (same email) Firebase
我有可能让用户选择是否要使用 Google、Facebook、电子邮件/密码等登录。
测试我的应用程序后,发生了以下情况:
经过一些研究,我最终 在 Android 文档中找到了将多个 Auth Providers 链接到一个帐户
我意识到我必须重构我的代码才能不使用 FirebaseAuth.signInWith 方法
除了我的 loginEmailAndPassword 之外还有一点:
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)
我的目标是链接和合并,我不知道如何链接帐户(email灰色和Google on 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 提供了预期的行为。 如果您使用 email 和密码创建用户,然后立即使用 Google 登录,则只能通过 Google 访问该帐户。 为什么? 因为在幕后,Firebase 会将使用 email 和密码创建的帐户转换为 Google 提供商的帐户。 不幸的是,您无法撤消该更改。
您问题中的 链接指的是将现有帐户链接到特定提供商的可能性。 例如,如果您实施匿名身份验证,那么您可以将该帐户与Google相关联。 这意味着 UID 保持不变。
如果您想阻止该机制的发生,那么您应该考虑允许为不同的提供商创建不同的帐户。 您可以在 Firebase 控制台的“身份验证”中的“设置”选项卡中找到名为“为每个身份提供者创建多个帐户”的选项。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.