【问题标题】:Check a session variable before laravel auth middleware在 laravel auth 中间件之前检查会话变量
【发布时间】:2017-05-23 18:08:56
【问题描述】:

我需要检查会话变量以在 laravel 中设置配置项。不过,我需要它在 auth 中间件之前运行。我已经尝试了各种配置以使其正常工作,但无论如何,auth 在我设置数据库之前运行,因此无法找到用户。

这是我目前所拥有的:

内核.php

'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
        \App\Http\Middleware\CheckTenant::class,
    ],

检查租户:

public function handle($request, Closure $next)
{

    if(session()->has('database')){
        //set db in config for eloquent
        Config::set('database.connections.mysql.database', session('database'));
    }

    $response = $next($request);

    return $response;

}

我的路线:

Route::group(['middleware' => 'auth'], function () {

    // All my routes that needs a logged in user
    Route::get('/dashboard', function () {
        return view('jobs.index');
    });

});

所以基本上我只需要在每个请求检查身份验证之前设置一个配置项。

任何帮助将不胜感激。

【问题讨论】:

    标签: php laravel session laravel-middleware


    【解决方案1】:

    问题是您正在尝试将数据保存到配置 after the request is handled by the application(请参阅中间件之前和之后部分)。在应用处理请求后设置配置没有任何意义。

    语法应该是:

    public function handle($request, Closure $next)
    {
        if (session()->has('database')) {
            Config::set('database.connections.mysql.database', session('database'));
        }
    
        $response = $next($request);
    
        return $response;
    
    }
    

    【讨论】:

    • 在此之前 Auth 中间件似乎仍在运行?
    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 2015-05-25
    • 1970-01-01
    • 2017-07-12
    • 2018-04-24
    • 2013-06-16
    • 2018-03-09
    • 1970-01-01
    相关资源
    最近更新 更多