我正在建立一个网站,我已经集成了firebase authentication登录/注册的网站用户。
用户可以通过电子邮件密码或移动OTP方法登录/注册。我使用的是官方的firebase js Auth UI Widget:firebaseui-web进行验证。
在注册时,我还想获取其他用户的详细信息,如全名、性别、年龄等。
我在网上找到了两种方法:
1.成功注册后在firestore中存储额外信息。
这种方法的问题是我想成为一个原子事务。意味着,要么所有额外的信息应该在注册过程中存储或注册过程不应该成功。我不知道如何实现这个流程,甚至是可能的。
1.使用JSON. stringify/JSON. parse方法在firebase auth object字段中存储额外的信息,如displayName、photoURL。我正在使用他们的auth UI小部件,不知道如何在电子邮件或移动OTP注册过程中嵌入此信息。
那么,如何在注册过程中保存用户的额外信息?任何不同的方法可能?
网站托管在firebase主机上。网站使用firestore来存储用户的任何额外数据,因为firebase auth不提供此功能。我还实现了firebase云函数(Typescript,node.js)来进行一些基本的CRUD操作。所以简单地说,一个完整的firebase环境。
4条答案
按热度按时间ee7vknir1#
这是每个firebase用户都要面对的问题,一般是怎么解决的?就像其他用户指出的,就是在Firestore中增加额外的用户信息,你能保证原子性吗?不,你不能,auth和db是两个不同的系统,您可以将用户添加到auth,并在回调中发现您无法将用户添加到db,因为您没有Internet连接。人们会怎么做?通常都是这样。
如果你的应用程序必须保证原子性,那么你可以在firebase函数中实现你的身份验证。例如,这是一个两步登录的例子:
如果出现问题,你可以添加auth中的用户删除,这至少可以保证你的回滚代码在Google服务器上执行。
此代码示例提取自https://www.toptal.com/firebase/role-based-firebase-authentication
whlutmcx2#
您想要捕获的附加信息实际上通常会存储在附加数据库中,如Cloud Firestore或Realtime Database。自定义声明通常保留用于与访问控制相关的信息,如组成员身份和用户是否为管理员。
除了注册所需的最少信息(例如,使用电子邮件+密码身份验证时的电子邮件地址和密码)之外,没有原子方法可以在注册过程中添加其他信息。如果原子性是您的用例的要求,您可能希望超越Firebase。
c0vxltue3#
既然你想保存用户的数据。我假设你保存数据是为了以后能对它做一些操作。因此建议你把你的数据保存在云Firestore中。云Firestore的查询将帮助你在将来能够操纵任何你可能想对数据进行的CRUD操作。
存储数据的一个好方法是在使用firebase auth注册用户之后。您可以在oncomplete侦听器中获取firebase auth返回的userID,然后在USERS集合中使用make一个文档,其键为userID,然后在该文档中保存有关用户的额外信息。
qc6wkl3g4#
首次注册和
onComplete
方法检查注册是否成功。获取用户唯一ID并将其用作密钥并存储数据,如
检查数据是否成功存储,继续下一个活动或主页,否则从授权中删除用户并要求他重试。