gpt4 book ai didi

javascript - 如何在Firebase中为同一用户处理多种登录方法?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:09:05 27 4
gpt4 key购买 nike

我目前正在使用Firebase开发身份验证系统。我希望我的系统接受电子邮件/密码,Google和Facebook作为注册和登录方法。

到现在为止还挺好。当用户分别注册每种方法时,一切都很好。当用户想要使用另一种方法进行注册并且我需要将新方法链接到同一用户先前使用另一种方法注册的同一帐户时,问题就开始了。

我的示例将仅提及电子邮件/密码和Google方法。

注意:我的Firebase身份验证系统设置为每封电子邮件仅接受1个帐户。

示例1(工作正常):

  • 用户首次在Google上注册
  • 完美!我得到了他的详细信息,并使用auth系统创建的用户ID将其写入Firestore。
  • 用户尝试使用他的电子邮件/密码(与他第一次在Google上进行注册时使用的电子邮件相同)再次尝试注册
  • 我收到一条错误消息,指出该电子邮件正在使用中,我让用户知道他已经在Google注册,请他再次使用Google
  • 登录
  • 然后,他登录Google后,我让他在自己的帐户页面中创建密码。
  • 我将使用该密码并将其链接到他最初与Google进行注册时所使用的他先前存在的帐户(他目前已登录)。
  • 太好了!现在,我有一个可以使用Google或他的密码登录的用户。

  • 示例2(问题):
  • 用户首次使用他的电子邮件/密码注册。请注意,他的电子邮件是来自Google(gmail)的电子邮件。
  • 完美!我得到了他的详细信息,并使用auth系统创建的用户ID将其写入Firestore。
  • 用户现在尝试使用Google登录方法(使用相同的电子邮件)再次注册。
  • 显然一切正常,用户登录就可以了。
  • 但是事实是,在没有任何警告的情况下,Firebase身份验证已放弃了他的电子邮件/密码方法,仅使用Google登录方法代替了它。

  • Google Group - Firebase Talk - About this issue

    从上面的链接以及有关StackOverflow的其他一些相关问题,我了解到这种行为是由于安全问题造成的,这就是为什么Google相对于其他身份验证提供程序具有“更高的优先级”的原因,因为您可以真正信任这些用户并他们的电子邮件。

    但是删除用户创建的密码对我来说似乎是错误的。更不用说没有任何警告。

    而且,这似乎与以下Firebase帮助页面冲突:

    Firebase Help - Allow multiple accounts with the same email address

    从上面链接的帮助页面:

    You can configure whether users can create multiple accounts that use the same email address, but are linked to different sign-in methods. For example, if you don't allow multiple accounts with the same email address, a user cannot create a new account that signs in using a Google Account with the email address ex@gmail.com if there already is an account that signs in using the email address ex@gmail.com and a password.



    从上面的摘录中,我了解到,如果我以前使用电子邮件/密码组合创建了该帐户,那么我将无法使用该帐户创建该帐户。但这并非如此,如示例2所示。非常奇怪!

    现在是真正的问题:

    由于我无法更改Firebase的行为,因此我正在考虑更改Firebase身份验证系统,以允许每个电子邮件使用多个帐户,并使用他们的电子邮件作为主键来处理Firestore中的所有用户数据(而不是使用用户ID作为(Firebase身份验证系统),因为电子邮件/登录方法的每种组合都将被视为Firebase身份验证系统中的不同帐户,因此每个帐户都有不同的用户ID。

    例如:

    johndoe@gmail.com /密码=用户ID X

    johndoe@gmail.com / Google登录=用户ID Y

    johndoe@gmail.com / Facebook登录=用户ID Z

    上述所有帐户都将使用johndoe@gmail.com作为“主键”(集合)在Firestore中存储和访问数据。

    但是由于我还处于开发初期,所以这似乎有些“hacky”,将来我可能会带来一些麻烦。

    您有什么推荐的吗?这里的主要目标是让我的用户使用 进行注册并使用他们想要的任何方法。所有方法都应允许它们访问我的应用程序(将在Firestore中)中的数据。

    我拒绝静默删除他们先前创建的用户密码,只是为了让他们注册并使用Google。

    还有其他想法或意见吗?

    很长的问题很抱歉,但是我认为它很好地说明了这个问题。

    最佳答案

    一种选择是强制密码用户在注册后立即验证其电子邮件地址。在示例2中,如果已验证电子邮件地址,则Firebase将保留帐户的现有密码保留。通过将验证链接发送到电子邮件地址,并且用户单击了该链接。

    关于javascript - 如何在Firebase中为同一用户处理多种登录方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54391942/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com