首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >中间件的Laravel顺序(中间件优先)。使用Postgres的多租户

中间件的Laravel顺序(中间件优先)。使用Postgres的多租户
EN

Stack Overflow用户
提问于 2017-06-11 19:15:16
回答 2查看 6.1K关注 0票数 3

web.php中,我在中间件中切换了Postgres模式,因为生成了HTTP请求的子域类型。这条路:

代码语言:javascript
运行
复制
Route::group(
    [
        'domain'     => '{tenant}.' . config('app.url'),
        'middleware' => 'select-schema'
    ],
    function () {
        $this->get('/', 'HomeController@index')->middleware('auth');
    }
);

选择模式中间件中,我会这样做。这是正确的。(别担心)

代码语言:javascript
运行
复制
DB::select('SET search_path TO ' . {tenant});

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

SQLSTATE42P01:未定义表:7错误:关系“用户”不存在

主要问题是

代码语言:javascript
运行
复制
$this->get('/', 'HomeController@index')->middleware('auth');

该模型运行良好,但中间件authselect-schema之前首先执行。

我怎么点菜? select-schema然后auth

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-13 05:35:56

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

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

代码语言:javascript
运行
复制
/**
 * Responsible for prioritizing the middleware
 *
 * @var array
 */
protected $middlewarePriority = [
    \App\Http\Middleware\SwitchSchema::class,
];

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

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

票数 11
EN

Stack Overflow用户

发布于 2017-06-12 04:08:40

您是否尝试过将您的路线与另一组包装在租户组中?看看这是否有效:

代码语言:javascript
运行
复制
Route::group([
        'domain'     => '{tenant}.' . config('app.url'),
        'middleware' => 'select-schema'
    ],function () {
        Route::group(['middleware' => 'auth'], function () {
            Route::get('/', 'HomeController@index');
        });
    }
);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44487764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档