ios - 如何在 Firebase IOS 中正确链接不同的 Auth 帐户

标签 ios swift firebase firebase-realtime-database firebase-authentication

背景:

我正在开发一个使用 firebase 作为后端的 IOS 应用程序。 有3种认证: 1:密码和邮箱 2: Facebook 3:谷歌

我已选中“每个帐户一封电子邮件”选项。

情况是:

假设我先使用其中一个 Auth 提供商登录,然后注销,然后想与任何其他两个 Auth 提供商注册。如果当前提供商的关联电子邮件与之前的相同,我将收到“电子邮件地址已被使用”错误。在这种情况下,我想将当前 Auth 帐户与以前的帐户相关联。

我知道我需要调用 linkWithCredential:completion: 方法来链接帐户。但是我首先需要登录以前的帐户,但是我怎么知道要登录哪个帐户呢?例如,如果我通过 Facebook 登录并收到“正在使用相同的电子邮件”错误,此时我如何知道我应该通过 Google 还是电子邮件/密码登录?

一件有趣的事情是,如果我先使用 Facebook 或电子邮件/密码登录,然后使用 Google 登录,firebase 将自动处理链接,但默认行为是用 Google 覆盖以前的 Auth 提供程序并保留 UID。 ..

我找到了一个有用的帖子 How to manage users' different authentication in firebase

但它只处理更简单的情况,即身份验证只有两个。

最佳答案

当您收到凭据已存在错误时,此时您已经有了电子邮件,然后您使用该电子邮件调用 fetchProvidersForEmail,它将查找与该电子邮件关联的提供商 ID。然后,您使用这些提供商之一登录用户。使用现有帐户完成登录后,使用导致错误发生的原始凭据调用 linkWithCredential:completion:。这会导致帐户链接。下次用户尝试登录时,他们将能够通过任一提供商登录同一用户。

检查 FirebaseUI-iOS,它已经为您处理了整个流程。您还可以查看源代码以了解它们如何处理此类情况:https://github.com/firebase/FirebaseUI-iOS

关于ios - 如何在 Firebase IOS 中正确链接不同的 Auth 帐户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45345277/

相关文章:

ios - 强制 iOS 不使用 AGPS

android - java.lang.NoSuchMethodError : No static method zzb 错误

android - FirebaseUI-Android Auth UI - 如何使用 AuthUI.getInstance().createSignInIntentBuilder() 设置自定义背景图片

angular - firebase.messaging 不是 Angular 9 中的函数

javascript - 文本选择事件结束?

ios - 在 viewWillAppear( ) 中获取空值但在 viewDidLoad( ) 中获取有效值

ios - 核心数据 - 带where条件的嵌套总和

swift - UICollectionView dequeue 在快速单元测试中引发异常

ios - 检测 Swift 应用程序是否正在从 Xcode 运行

ios - 在通过 WiFi 连接的两个或多个设备之间通话 - iOS