在Firestore和Firebase Auth中处理用户数据的最佳方式,配置为每个电子邮件允许多个帐户

时间:2019-01-31 18:53:00

标签: reactjs firebase firebase-authentication google-cloud-firestore

我目前正在为我的Firebase + Firestore + React应用程序开发入门套件。

我一直在努力寻找为每个用户处理多种登录方法的最佳方法。

起初,我尝试使用Firebase Auth并启用“每个电子邮件一个帐户”的限制(这是默认设置)。

但是在尝试完成我的预期行为失败很多之后,我决定放弃并将Firebase身份验证切换为“每个电子邮件允许多个帐户”

我的主要目标是:

如果我为我的用户提供3种注册和登录方法(例如:电子邮件/密码+ Google + Facebook),我认为我应该尊重这3种方法,无论他们可能选择的顺序如何已使用

这实际上是不可能的,因为“限制每个电子邮件一个帐户”的限制,因为如果您的用户首次使用电子邮件/密码进行注册,那么Firebase如果在下次使用Google进行注册时会删除其密码。它会如此默默地执行此操作,以至于您的用户将永远不知道为什么密码不再起作用了(至少从我的研究以及对Firebase支持的问题中我了解到这一点)。

这是出于安全原因,因为Google Provider的优先级高于其他提供商(主要是因为Google电子邮件在这种情况下会被隐式验证回来)。我明白了,但我只是认为,如果在不通知用户密码的情况下删除用户密码,将会给用户带来糟糕的体验。

I have another question that goes deeper into this issue

但是在这里有这个问题时,我想了解以下内容:

虽然每个用户可以使用多个帐户,但我必须将用户的数据email用作uniqueID,将其数据保存在Firestore上,因为每个电子邮件使用多个帐户/登录方法,每个帐户最终将拥有由Firebase Auth系统生成的不同的uid,但它们都应有权访问我的应用程序中的同一帐户,因此,我必须将其email用作{ {1}})。

注意:从我的应用程序的角度来看:Firebase Auth上使用相同电子邮件地址的每个帐户都对应同一用户。

例如:

  1. myUser@gmail.com使用电子邮件密码进行注册(发送链接以验证其电子邮件)

  2. Firebase Auth为myUser@gmail.com/email-password创建一个帐户。 uniqueID

  3. myUser@gmail.com使用Google登录进行注册

  4. Firebase身份验证为myUser@gmail.com/google-sign-in创建另一个帐户。 uid = x

  5. myUser@gmail.com使用Facebook登录进行注册

  6. Firebase身份验证为myUser@gmail.com/facebook-sign-in创建另一个帐户。 uid = y

由于每个帐户都有不同的uid = z,因此我将让他们所有人都使用uidemail来访问Firestore上的相同数据,这对于每个帐户,在这种情况下。

问题

尽管似乎可以解决我的问题,但我担心将来可能会出现复杂情况。你们中任何一位经验丰富的Firebase开发人员,可能会想到我不应该使用上述方法解决问题的原因?

请记住,从我的应用程序的角度来看:“用户就是电子邮件” ,而不是Firebase Auth上的帐户。每个用户在Firebase Auth上可能拥有1个,2个或3个帐户。

您是否看到以下潜在问题/冲突?

  • Firestore安全规则?
  • Firebase的云功能吗?
  • 某些firebase-admin案例?
  • 某种消息传递系统冲突?
  • 我不知道...我在这里集思广益。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我看不到您描述的设置有任何问题-而且,由于他们的电子邮件是您拥有的唯一共享身份信息,因此您选择的余地并不大。只要你组织根据各地的电子邮件地址一切......跳过相关的火力点产生的UID话,那么它应该是罚款。

一个警告,我给你的是,你应该特别注意从电子邮件地址,剔除一些特殊字符,当你在数据库中写。 These database docs包含有关Firebase数据库密钥中不允许使用的字符的信息:

  

如果您创建自己的密钥,则它们必须是UTF-8编码的,可以是   最大768个字节,并不能包含。,$,#,[,],/,或ASCII   控制字符0-31或127。不能使用ASCII控制   中的值字符本身,无论是。

其中许多是valid portions of an email address

这是我可以想到的一项重大警告事项,否则您应该表现出色。免责声明我在FCM方面没有太多经验,因此,如果您想在将来的某个时间添加移动客户端,可能还有我没有注意到的其他考虑事项。

相关问题