乌鸦嘴文档 乌鸦嘴文档
乌鸦嘴社区 (opens new window)
乌鸦嘴社区 (opens new window)
  • 简介

  • 概念

  • 租赁模式

  • 单数据库

  • 识别租户

    • 租户识别
      • 域名识别
      • 子域名识别
      • 域/子域名 的综合识别
      • 路径识别
      • 请求数据识别
      • 手动识别租户
      • 定制 "失败 "逻辑
    • 早期识别
  • 多数据库

  • 深度挖掘

目录

租户识别

# 租户识别

该软件包让你用以下方法识别租户。

  • 域名识别 (acme.com)
  • 子域识别 (acme.yoursaas.com)
  • 域名或子域名识别(上述两种)。
  • 路径识别(yoursaas.com/acme/dashboard)
  • 请求数据识别(yoursaas.com/users?tenant_id=acme - 或使用请求头)

但是,您可以自由编写其他租户解析器。

上面提到的所有识别方法都有自己的中间件。 您可以在下面阅读有关每种识别方法的更多信息。

# 域名识别

要使用这种识别方法,请确保你的租户模型使用HasDomains特性。

请务必阅读文档中的域名页面。

这种关系是租户有许多域名。将主机名存储在domains表的domain列中。

这种识别方法是由Stancl\Tenancy\Middleware\InitializeTenancyByDomain中间件提供的。

# 子域名识别

这与域名识别完全相同,只是你将子域名存储在domain表的domain列中。

这种方法而不是在domain列中存储子域的完整主机名的好处是,你可以在你的任何中心域上使用这个子域。

这个方法的中间件是Stancl\Tenancy\Middleware\InitializeTenancyBySubdomain。

# 域/子域名 的综合识别

如果你想同时使用子域和域名,请使用Stancl\Tenancy\Middleware\InitializeTenancyByDomainOrSubdomain中间件。

在domain列中包含点的记录将被视为域名/主机名(例如:foo.bar.com),不包含任何点的记录将被视为子域(例如:foo)。

# 路径识别

有些应用程序希望使用一个单一的域名,但使用路径来识别租户。这将是你希望客户使用你的品牌产品,而不是给他们一个白标产品,让他们在自己的域名上使用。

要做到这一点,请使用Stancl\Tenancy\Middleware\InitializeTenancyByPath中间件,并确保你的路由是以/{tenant}为前缀的。

use Stancl\Tenancy\Middleware\InitializeTenancyByPath;

Route::group([
    'prefix' => '/{tenant}',
    'middleware' => [InitializeTenancyByPath::class],
], function () {
    Route::get('/foo', 'FooController@index');
});

如果你想自定义参数的名称(例如用team'代替tenant',查看PathTenantResolver的公共静态(public static)属性)。

# 请求数据识别

你可能想根据请求数据(头信息或查询参数)来识别租户。具有SPA前端和API后端的应用程序可能想使用这种方法。

这种识别方法的中间件是Stancl\Tenancy\Middleware\InitializeTenancyByRequestData。

你可以自定义该中间件在请求中寻找的内容。默认情况下,它将寻找X-Tenant头。如果没有找到该头,它将寻找 "租户 "查询参数。

如果你想使用一个不同的头,请改变静态属性:

use Stancl\Tenancy\Middleware\InitializeTenancyByRequestData;

InitializeTenancyByRequestData::$header = 'X-Team';

如果你想只使用查询参数标识,请将头的静态属性设置为空:

use Stancl\Tenancy\Middleware\InitializeTenancyByRequestData;

InitializeTenancyByRequestData::$header = null;

如果你想禁用查询参数的识别,只使用标题,请将参数的静态属性设置为空:

use Stancl\Tenancy\Middleware\InitializeTenancyByRequestData;

InitializeTenancyByRequestData::$queryParameter = null;

# 手动识别租户

参见手动初始化页面,了解如何手动识别租户。

# 定制 "失败 "逻辑

每个识别中间件都有一个静态$onFail属性,可以用来定制当租户无法被识别时应该发生的行为。

\Stancl\Tenancy\Middleware\InitializeTenancyByDomain::$onFail = function ($exception, $request, $next) {
    return redirect('https://my-central-domain.com/');
};
单数据库租用
早期识别

← 单数据库租用 早期识别→

Theme by Vdoing | Copyright © 2020-2022 wyz.xyz 宁ICP备15001739号-5
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×