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

背景:

我正在开发一个使用Firebase作为后端的IOS应用程序。 有3个authentication:1:密码和电子邮件2:FaceBook 3:谷歌

我已经检查了选项“每个帐户一个电子邮件”选项。

情况是:

假设我是第一次使用Auth服务提供商login,然后注销,并希望与任何其他两个Auth服务提供商签约。 如果当前提供者的关联电子邮件与以前相同,则会收到“电子邮件地址已被使用”错误。 在这种情况下,我想将当前的Auth帐户与以前的帐户关联起来。

我知道我需要调用linkWithCredential:completion:方法来链接帐户。 但我首先需要login以前的帐户,但我怎么能告诉哪个帐户login? 例如,如果我通过Facebooklogin并得到“正在使用相同的电子邮件”错误,那么我现在怎么知道我是否应该通过Google或电子邮件/密码login?

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

我find了一个有用的post如何在Firebase中pipe理用户的不同身份validation

但它只处理一个简单的情况,authentication只有两个。

当你得到证书已经存在的错误,你已经有了电子邮件在那个时候,你然后调用fetchProvidersForEmail与该电子邮件,将查找与该电子邮件相关的提供商ID。 然后您使用其中一个提供者login用户。 完成使用现有帐户login后,您可以调用linkWithCredential:completion:以导致错误发生的原始凭据。 这导致帐户链接。 用户下次尝试login时,他们将能够通过任一提供商login到同一用户。

检查已经照顾整个stream程的FirebaseUI-iOS。 您还可以查看源代码,看看他们如何处理这种情况: https : //github.com/firebase/FirebaseUI-iOS