Firebase和Firestore是否可以进行多租户设置?

时间:2019-01-11 16:25:02

标签: firebase google-cloud-firestore

我正在考虑使用Firebase和Firestore创建一个多租户应用程序。租户的数量将很少(最初约为6个),最终用户将不会在应用程序上创建自己的实例,而将由管理员严格控制。

我的理想情况是只有一个应用程序,可以将多个域附加到该应用程序,并将请求路由到特定数据库以实现它们。

我有一些担忧:

我已经阅读了文档,可以为每个应用创建多个数据库,但是在管理面板中看不到这些选项,因此我不确定文档当前是否不正确(或者是否是指实时数据库) )。

我不希望注册的用户注册到所有租户,并且考虑到Firebase身份验证似乎可以正常工作的方式,我看不到可以指定用户注册到哪个域的任何方式。我本来想在一个集合中进行管理,该集合可跟踪用户所属的域,并对其进行伪造,以使其看起来像是使用户处于孤立状态,但是如果用户在“两个”租户中注册,并且想要更改其登录名,凭据,这会在整个网络上对其进行更改,并且可能会造成混淆。

所以听起来这并不能像我想要的那样干净,这将使我指向选项2:

拥有一个前端应用程序,该应用程序引用了它可以连接到的所有Firebase应用程序,并联系了单独应用程序的后端,以保持数据和用户身份验证的分离。这样可以解决孤立的用户问题,但是我将在后端维护几个不同的应用程序,而制作此产品的新版本的全部目的是摆脱维护多个,相似但略有不同的代码库的麻烦。解决该问题的一种方法是将相同的代码存储库部署到firebase上的不同应用程序:CLI是否允许我每次选择我的部署目标?

我认为选项3是让无头的React应用程序与节点服务器或其他服务器联系,但是那样我就失去了所有出色的Firebase优势,而我真的在挖掘Firebase。

这是一个可解决的问题吗?还是我想将方形钉塞入圆孔?

谢谢!

1 个答案:

答案 0 :(得分:2)

我的团队最近解决了类似的情况,我们需要使用Firebase在多个租户之间部署单个Angular应用程序。

我们提出的解决方案与您的第二种选择非常相似:

  1. 在Firebase控制台上创建单独的Firebase项目,为您计划支持的每个租户创建一个。
  2. 在安装CLI并以对您刚刚创建的每个项目均具有访问权限的帐户登录后,在根目录中添加.firebaserc以为每个新创建的项目添加别名。看起来像:
{
  "projects": {
    "dev": "my-dev-project-id",
    "tenant1": "my-tenant1-project-id",
    "tenant2": "my-tenant2-project-id"
  }
}
  1. 您现在可以通过以下方式在本地提供服务,以连接开发Firebase项目: firebase serve -P dev并通过firebase serve -P dev部署特定项目。默认情况下,这会将您的项目部署到Firebase托管,并部署您进行的所有关联的云功能,但是您可以轻松customize this behavior
  2. 要一次部署所有项目,请设置一个简单的./deploy-all.sh脚本来迭代项目并替换每个别名。您还可以在部署每个项目之前自定义此选项以运行linting / instillation等。
  3. Firebase托管将automatically host分别位于your-app.firebaseapp.comyour-app.web.app的每个域。您也可以customize the subdomains将每个项目映射到。

注意事项: 上述方法依赖于租户URL将项目数据库映射到用户信息。在移动设备上,此方法变得稍微复杂一些。我们让用户在移动设备上输入可以动态映射到Firebase配置的密钥,但是可能有更好的方法来解决此问题。