多租户SaaS应用程序的最佳方法

时间:2016-08-30 16:50:03

标签: php laravel database-schema multi-tenant saas

我正在尝试构建一个多租户SaaS应用程序,我知道有多种方法,但我选择了一个我认为最适合的多数据库。

所以我为每个租户创建一个数据库,并在主数据库中存储一个租户表 并根据子域将用户连接到各自的数据库。

现在我的问题是在主数据库中存储用户的位置?或者租户数据库,将用户存储在主数据库中会使得很难在其他数据库中获取用户相关模型,但将其存储在租户数据库中会使得很难对所有用户进行身份验证...

还有什么是最好的情景?

  1. 验证,获取jwt令牌。
  2. 为每个请求发送令牌。
  3. 对每个请求验证令牌,检查子域,连接到相应的租户数据库,执行请求。
  4. 这是一个好方法吗?我该怎么处理用户表问题? ThnQ

2 个答案:

答案 0 :(得分:0)

我可以提供第三种选择。在租户和主数据库中都有用户。然后,您可以创建过程以在用户更改租户数据库时更新主数据库(反之亦然)。

另外,我不了解Laravel中的模型,但MySQL并没有跨数据库JOIN的问题。

答案 1 :(得分:0)

好的选择是将用户留在租户数据库中。当您根据子域区分租户时,可以告诉您的身份验证系统查询子域特定的数据库。

共享身份验证流程

  1. 用户点击子域以登录申请
  2. 用户凭据将发送至应用程序
  3. 在将凭据传递给身份验证之前,请根据用户来自的子域确定数据库以进行用户身份验证。
  4. 将数据库名称,用户凭据传递给身份验证系统
  5. 身份验证系统查询特定数据库并验证用户
  6. 生成会话