Firebase 自动身份验证链接

Firebase 自动身份验证链接,firebase,firebase-authentication,Firebase,Firebase Authentication,在我们的应用程序中,我们使用“每个电子邮件地址一个帐户”。我们希望用户使用特定的身份验证提供商注册,我们会跟踪并坚持使用它 今天我注意到,如果我使用谷歌或Facebook提供商登录,我可以向自己发送一个到相关电子邮件地址的密码重置链接,这样我就可以使用电子邮件/密码提供商。 根据第一个提供者的不同,行为略有不同: 如果我先使用Google,在使用密码重置链接后,我现在可以使用任一提供商登录,并且两者都链接到相同的firebase uid。如果我调试,我可以在我从Firebase返回的authD

在我们的应用程序中,我们使用“每个电子邮件地址一个帐户”。我们希望用户使用特定的身份验证提供商注册,我们会跟踪并坚持使用它

今天我注意到,如果我使用谷歌或Facebook提供商登录,我可以向自己发送一个到相关电子邮件地址的密码重置链接,这样我就可以使用电子邮件/密码提供商。 根据第一个提供者的不同,行为略有不同:

  • 如果我先使用Google,在使用密码重置链接后,我现在可以使用任一提供商登录,并且两者都链接到相同的firebase uid。如果我调试,我可以在我从Firebase返回的authData对象上的providerDetails数组中看到这两个
  • 如果我先使用Facebook,在我使用密码链接后,密码提供者将完全替换Facebook,尽管它保留了旧的firebase uid。在这一点上,我不能再使用Facebook登录
我的问题是:这种行为是故意的吗?还有,有没有办法把它关掉

如果用户使用Facebook(我们跟踪)登录,然后忘记并发送密码重置,这可能会造成混乱。这并不是世界末日,因为他们可以继续使用密码登录,但这肯定会弄脏水


谢谢,这种行为是故意的

对于最终用户来说,如果他们使用谷歌或Facebook登录应用程序,然后他们想要恢复密码,最有可能的原因是他们(或攻击者)无法使用该身份提供商登录

用户单击密码重置链接后,Firebase将删除非电子邮件身份提供程序,以防止其他人以静默方式访问该帐户。如果用户仍然想添加Facebook/Twitter登录,他们可以通过手动帐户链接(如果应用程序支持)来添加


如果用户的电子邮件服务与身份提供商相同(例如@gmail.com用户使用谷歌登录应用程序),Firebase会进行优化以保留身份提供商,因为没有安全风险。

问得好,希望fb员工回答!有一件事可以反驳这一点:我们发现,用户之所以没有点击重置链接,是因为他们无法使用Google/Facebook登录,而是因为他们忘记了最初使用的方法。因此,他们可以使用重置链接恢复这种情况,但这确实会让他们感到困惑,因为他们切换了。如果他们真的无法使用Google/Facebook登录,他们在源代码处重置密码,而不是在Firebase中切换提供商,这难道不是更有意义吗?为了解决用户忘记以前登录方法的问题,FirebaseUI首先实现了标识符流,如果用户第一次仅键入他们的电子邮件,则以下提示将基于帐户状态(重定向到Google/Facebook,或现有密码,或新帐户注册)。如果用户可以在Google/Facebook等处重置密码,他们将能够在访问其Google/Facebook帐户后登录Firebase。在这种情况下,用户无需单击Firebase应用程序中的“重置密码”链接。您能否提供指向此标识符优先方法的任何文档的链接?在我读过的文档中,我没有遇到过类似的东西。虽然来自googleidentitytoolkit()的文档有点旧,但FirebaseUI共享相同的流程。