使用 Firebase 和 Flutter 的多租户 SaaS 应用

Posted

技术标签:

【中文标题】使用 Firebase 和 Flutter 的多租户 SaaS 应用【英文标题】:Multitenant SaaS App using Firebase and Flutter 【发布时间】:2020-09-08 14:53:34 【问题描述】:

我正在评估 Firebase 以在 SaaS 模式下开发一个应用程序,让来自多家公司的人都可以访问它。公司中的每个人都应该只访问他们公司的数据,而不是其他公司的数据。同样在公司内部,每个人可以访问和不能定义的配置文件。

    Firebase 文档建议不要使用多租户方法 (https://firebase.google.com/docs/projects/learn-more)。他的建议是为每家公司管理一个火力基地项目。我的疑问:这真的有必要吗?它会涉及在 PlayStore 中管理不同的应用程序吗?能否以编程方式创建 Firebase 项目?

    另一方面,Google Cloud 推出了允许多租户 (https://cloud.google.com/identity-platform/docs/multi-tenancy-authentication) 的 GCIP 身份验证服务。我的疑问是: 1. 要将其与 Firebase 一起使用,我是否必须创建对 Firebase 和 Flutter 具有额外复杂性的后端服务? 2.是否可以在不丢失Firebase提供的离线访问属性的情况下使用该服务?

谢谢,

大卫

【问题讨论】:

想知道您是否有解决方案?我也有同样的情况。在启动时,我不想在每次需要添加列或更改结构时在 mysql 和迁移模式上浪费时间。在产品成熟之前,我需要一些灵活的东西来让步。 @EdenWebStudio 有什么更新吗?我目前正计划在 GCIP 中使用多租户,到目前为止它工作得很好,我看不出 Firebase 团队反对它的任何理由。我目前面临的唯一缺点是在 Flutter 应用程序中进行身份验证,因为它似乎不支持设置租户 ID,解决方法是调用云函数进行身份验证并返回身份验证令牌。 @jonas 我刚刚得到了 mysql 和 json 列。我无法理解如何为每个租户分区 firestore。文档不够清楚。你正在做的就是我会做的。调用函数意味着您可以在特权环境中应用额外的安全检查。 @EdenWebStudio with partition firestore 你的意思是像为每个租户使用不同的数据库? @Jonas 是的。它仍将是同一个数据库,但租户操作的范围仅限于其分区。此链接在“数据存储模式”中讨论了 Firestore,但我可能误解了它们的意思。 cloud.google.com/datastore/docs/concepts/multitenancy 【参考方案1】:

我可能有一个可能的解决方案我已经部分尝试过

创建支持的主 API - 管理主 API 中的所有常见特性/功能

例如:CIM - 客户信息管理 UCID - 唯一的客户 ID 基于 mobileno+OTP 客户端 ID - ClientA,B,K,Y 表示 UCID 属于这些客户端应用程序

ClientAPP - 为每个客户单独构建在他们的应用商店中发布 客户端应用程序 ID - 001 注册/登录 - 检查是否在 ClientID 中注册了 mobileno Endpoint API - 管理客户端特定数据 例如: 应用限制国家、年龄等 应用程序徽标 应用程序启动画面: 背景 = 图片/网址

客户端应用程序 ID - 003 注册/登录 - 检查是否在 ClientID 中注册了 mobileno Endpoint API - 管理客户端特定数据 例如: 应用限制国家、年龄等 应用程序徽标 应用程序启动画面: 背景 = 渐变/代码

sample-multi-tenant API management on Hasura

【讨论】:

以上是关于使用 Firebase 和 Flutter 的多租户 SaaS 应用的主要内容,如果未能解决你的问题,请参考以下文章

如何在项目中使用 firebase 和 firebase 功能的现有 Flutter 应用程序中更新包名称?

如何使用 Flutter 成功登录和退出 Firebase?

使用firebase和flutter登录google后获取用户详细信息

如何使用 Flutter 和 Firebase 为聊天应用制定规则

使用电子邮件和密码创建帐户时 Flutter + Firebase updateDisplayName

如何使用 Flutter 在 Firebase 中正确登录和注册?