背景:
我正在开发一个使用firebase作为后端的IOS应用程序。 有3个身份验证: 1:密码和电子邮件 2:脸谱 3:谷歌
我已选中“每个帐户一封电子邮件”选项。
情况是:
如果我首先使用其中一个Auth提供程序登录,请稍后注销,并希望注册其他两个Auth提供程序。如果当前提供商的关联电子邮件与之前相同,我将收到“已使用电子邮件地址”错误。在这种情况下,我想将当前的Auth帐户与之前的帐户相关联。
我知道我需要调用linkWithCredential:completion:
方法来关联帐户。但我首先需要在以前的帐户中签名,但如何判断要登录的帐户?例如,如果我通过Facebook登录并获得“使用相同的电子邮件”错误,我现在如何知道是否应该通过Google或电子邮件/密码登录?
有一件有趣的事情是,如果我先使用Facebook或电子邮件/密码登录并稍后登录Google,firebase将自动处理链接,但默认行为是用Google覆盖以前的Auth提供商并保留UID。 ..
我找到了一个有用的帖子How to manage users' different authentication in firebase
但它只涉及一个更简单的情况,即身份验证只有两个。
答案 0 :(得分:1)
当您获得凭据已存在错误时,您已经拥有该电子邮件,然后使用该电子邮件调用fetchProvidersForEmail
,该电子邮件将查找与该电子邮件关联的提供商ID。然后,您可以使用其中一个提供程序登录用户。使用现有帐户完成登录后,使用导致错误发生的原始凭据调用linkWithCredential:completion:
。这会导致帐户链接。用户下次尝试登录时,他们将能够使用任一提供商登录同一用户。
检查FirebaseUI-iOS,它已经为您完成整个流程。您还可以查看源代码以了解它们如何处理此类情况:https://github.com/firebase/FirebaseUI-iOS