繁体   English   中英

链接多个用户帐户(同一电子邮件) Firebase

[英]Link several user accounts (same email) Firebase

我有可能让用户选择是否要使用 Google、Facebook、电子邮件/密码等登录。

测试我的应用程序后,发生了以下情况:

  1. 我用我的名字 email 和密码注册
  2. 处理入门逻辑
  3. 在 Firebase 上验证我的授权用户(灰色 email 图标)
  4. 注销帐户
  5. 现在,我想用谷歌登录(与 email 和密码注册时使用的相同的 email)
  6. Google 登录有效
  7. 在 Firebase 上验证我的授权用户(灰色的 email 图标变成了 Google 图标)
  8. 注销帐户
  9. 无法再使用 email 和密码登录,但谷歌登录有效

经过一些研究,我最终 在 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. 我可以调用一些东西来合并 prevUser 和 currentUser 帐户吗? 我只想让用户有可能使用不同的身份验证。
  2. 我不担心数据,因为如果它是相同的用户 UID,则身份验证提供者无关紧要
  3. 我还能使用“createUserWithEmailAndPassword”吗?

步骤 1 到 9 提供了预期的行为 如果您使用 email 和密码创建用户,然后立即使用 Google 登录,则只能通过 Google 访问该帐户。 为什么? 因为在幕后,Firebase 会将使用 email 和密码创建的帐户转换为 Google 提供商的帐户。 不幸的是,您无法撤消该更改。

您问题中的 链接指的是将现有帐户链接到特定提供商的可能性。 例如,如果您实施匿名身份验证,那么您可以将该帐户与Google相关联。 这意味着 UID 保持不变。

如果您想阻止该机制的发生,那么您应该考虑允许为不同的提供商创建不同的帐户。 您可以在 Firebase 控制台的“身份验证”中的“设置”选项卡中找到名为“为每个身份提供者创建多个帐户”的选项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM