我正在考虑使用Firebase和Firestore创建一个多租户应用程序。租户的数量将很少(最初约为6个),最终用户将不会在应用程序上创建自己的实例,而将由管理员严格控制。
我的理想情况是只有一个应用程序,可以将多个域附加到该应用程序,并将请求路由到特定数据库以实现它们。
我有一些担忧:
我已经阅读了文档,可以为每个应用创建多个数据库,但是在管理面板中看不到这些选项,因此我不确定文档当前是否不正确(或者是否是指实时数据库) )。
我不希望注册的用户注册到所有租户,并且考虑到Firebase身份验证似乎可以正常工作的方式,我看不到可以指定用户注册到哪个域的任何方式。我本来想在一个集合中进行管理,该集合可跟踪用户所属的域,并对其进行伪造,以使其看起来像是使用户处于孤立状态,但是如果用户在“两个”租户中注册,并且想要更改其登录名,凭据,这会在整个网络上对其进行更改,并且可能会造成混淆。
所以听起来这并不能像我想要的那样干净,这将使我指向选项2:
拥有一个前端应用程序,该应用程序引用了它可以连接到的所有Firebase应用程序,并联系了单独应用程序的后端,以保持数据和用户身份验证的分离。这样可以解决孤立的用户问题,但是我将在后端维护几个不同的应用程序,而制作此产品的新版本的全部目的是摆脱维护多个,相似但略有不同的代码库的麻烦。解决该问题的一种方法是将相同的代码存储库部署到firebase上的不同应用程序:CLI是否允许我每次选择我的部署目标?
我认为选项3是让无头的React应用程序与节点服务器或其他服务器联系,但是那样我就失去了所有出色的Firebase优势,而我真的在挖掘Firebase。
这是一个可解决的问题吗?还是我想将方形钉塞入圆孔?
谢谢!
答案 0 :(得分:2)
我的团队最近解决了类似的情况,我们需要使用Firebase在多个租户之间部署单个Angular应用程序。
我们提出的解决方案与您的第二种选择非常相似:
.firebaserc
以为每个新创建的项目添加别名。看起来像:{
"projects": {
"dev": "my-dev-project-id",
"tenant1": "my-tenant1-project-id",
"tenant2": "my-tenant2-project-id"
}
}
firebase serve -P dev
并通过firebase serve -P dev
部署特定项目。默认情况下,这会将您的项目部署到Firebase托管,并部署您进行的所有关联的云功能,但是您可以轻松customize this behavior。 ./deploy-all.sh
脚本来迭代项目并替换每个别名。您还可以在部署每个项目之前自定义此选项以运行linting / instillation等。 your-app.firebaseapp.com
和your-app.web.app
的每个域。您也可以customize the subdomains将每个项目映射到。 注意事项: 上述方法依赖于租户URL将项目数据库映射到用户信息。在移动设备上,此方法变得稍微复杂一些。我们让用户在移动设备上输入可以动态映射到Firebase配置的密钥,但是可能有更好的方法来解决此问题。