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

Bri*_*ogg 6 firebase google-cloud-firestore

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

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

我有一些担忧:

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

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

因此,听起来这将无法像我所希望的那样干净,这将使我指向选项2:

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

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

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

谢谢!

小智 5

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

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

  1. 在 Firebase 控制台上创建单独的 Firebase 项目,为您计划支持的每个租户创建一个项目。
  2. 安装 CLI 并使用有权访问刚刚创建的每个项目的帐户登录后,.firebaserc在根目录中添加 为每个新创建的项目添加别名。这看起来像:
{
  "projects": {
    "dev": "my-dev-project-id",
    "tenant1": "my-tenant1-project-id",
    "tenant2": "my-tenant2-project-id"
  }
}
Run Code Online (Sandbox Code Playgroud)
  1. 您现在可以通过以下方式在本地提供连接您的开发 Firebase 项目的代码: firebase serve -P dev并通过以下方式部署特定项目:firebase serve -P dev。默认情况下,这会将您的项目部署到 Firebase 托管并部署您创建的任何关联的云功能,但您可以轻松自定义此行为
  2. 要一次部署所有项目,请设置一个简单的./deploy-all.sh脚本来迭代项目并替换每个别名。您还可以自定义它以在部署每个项目之前运行 linting/instillation 等。
  3. Firebase 托管将自动在和托管每个域。您还可以自定义每个项目映射到的子域。your-app.firebaseapp.comyour-app.web.app

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