问题:Laravel 的中间件顺序(Middleware Priority)。使用 Postgres 的多租户

web.php 中,我在中间件中切换了 Postgres 模式,因为 HTTP 请求的子域类型已被发出。这边走:

Route::group(
    [
        'domain'     => '{tenant}.' . config('app.url'),
        'middleware' => 'select-schema'
    ],
    function () {
        $this->get('/', 'HomeController@index')->middleware('auth');
    }
);

select-schema 中间件中,我做了这样的事情。这可以正常工作。 (不用担心)

DB::select('SET search_path TO ' . {tenant});

我的主要问题是:对于public模式和任何individual tenant,我都有不同的migrations。在individual tenant我有users表。一旦我登录它就会弹出这个错误。

SQLSTATE[42P01]:未定义表:7 错误:关系“用户”不存在

主要问题是

$this->get('/', 'HomeController@index')->middleware('auth');

该模型运行良好,但中间件auth先于select-schema执行

如何订购?select-schema然后是auth

解答

我找到了解决方案,为此,在App\Kernel中有一个叫做$middlewarePriority的东西。

添加这个可以帮助我解决问题。

/**
 * Responsible for prioritizing the middleware
 *
 * @var array
 */
protected $middlewarePriority = [
    \App\Http\Middleware\SwitchSchema::class,
];

我从这个链接得到了解决方案。

https://github.com/laravel/framework/issues/19565

Logo

PostgreSQL社区为您提供最前沿的新闻资讯和知识内容

更多推荐