ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-12-11 05:36:17  阅读:305  来源: 互联网

标签:firebase reactjs firebase-authentication javascript


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

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

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

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

Example1(工作正常):

>用户首次在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.

从上面的摘录中,我了解到,如果我以前使用电子邮件/密码组合创建了该帐户,那我将无法使用Google创建该帐户.但这并非如示例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,Firebase将保留帐户的现有密码.通过将验证链接发送到电子邮件地址,并且用户单击了该链接.

标签:firebase,reactjs,firebase-authentication,javascript
来源: https://codeday.me/bug/20191211/2106667.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有