Firebase 使用 Google 帐户覆盖登录

Posted

技术标签:

【中文标题】Firebase 使用 Google 帐户覆盖登录【英文标题】:Firebase Overwrites Signin with Google Account 【发布时间】:2017-04-07 13:43:19 【问题描述】:

文档中似乎没有提到这一点,我发现的只是this和this,我想在这里确认一下:

如果现有帐户具有相同的电子邮件地址,但 使用其他凭据创建(例如密码或不可信的 提供者),出于安全原因,将删除以前的凭据。

如果用户通过 Facebook 或电子邮件/密码登录,后来又通过 Google 登录,他们的帐户登录方式将转换为 Google。它只发生在 Google 上,并且只有一个帐户的设置处于活动状态。

这是故意的吗,有什么办法可以阻止吗?

【问题讨论】:

【参考方案1】:

正如文档所述:某些电子邮件域具有受信任的提供商。最突出的是:Google 是 @gmail.com 地址的受信任提供商,因为它是这些电子邮件地址的唯一发行者。

如果用户首先在 Facebook 上注册了他们的 gmail 地址,然后在 Google 提供商处使用相同的 gmail 地址进行了注册,则后者的注册被视为推翻前者。如果用户稍后再次使用 Facebook 登录,则可以关联两个帐户。

据我所知,防止这种情况的唯一方法是允许每个电子邮件地址有多个帐户。

另请参阅一些 Firebase 身份验证工程师的这些帖子:

Firebase, login by same email different provider https://github.com/firebase/FirebaseUI-android/issues/1180 https://groups.google.com/d/msg/firebase-talk/ms_NVQem_Cw/8g7BFk1IAAAJ

【讨论】:

所以这是一个功能?支持刚刚发送给我:感谢您让我们知道您的担忧。我们知道这个问题,我已将您的担忧传达给团队。这已经引起了正确的人的注意,并被适当地优先考虑。我目前无法分享任何细节或时间表,但我们会考虑您的反馈。 有没有办法真正提醒用户并阻止谷歌登录优先于其他登录? 有个函数可以调用FIRAuth.auth()?.fetchProviders(forEmail: email 当您的登录流程是 Google 和 Facebook 时,getRedirectResult 仅引发 "auth/account-exists-with-different-credential" 错误并不是很直观。如果你这样做,那么反过来,没有错误,谷歌身份验证只是替换了 facebook 身份验证。 :( 在将近四年后的今天,这仍然是一个问题。所以我再次报告了一个问题 - github.com/firebase/firebase-ios-sdk/issues/5344 @FrankvanPuffelen 你知道为什么谷歌不信任 Facebook 的电子邮件验证,因为他们现在信任 Apple 登录中提供的电子邮件,甚至是 gmail 地址。那么为什么 Facebook 电子邮件不受信任呢?

以上是关于Firebase 使用 Google 帐户覆盖登录的主要内容,如果未能解决你的问题,请参考以下文章

Firebase Google 身份验证,退出并再次登录将使用上次登录的帐户登录

有没有办法确定用户是通过自定义 Firebase 帐户还是通过 Flutter 中的 Google 帐户登录的?

使用Firebase Google用户身份验证更改用户

如果在 Firebase Android 初始注册期间帐户已与 google 关联,则使用 Facebook 登录

使用 google 登录可防止用户使用其他帐户再次登录 - iOS

如何将 Firebase 帐户关联到 Google Play 游戏帐户