在laravel auth中间件之前检查会话变量

时间:2017-01-09 13:04:11

标签: php laravel session laravel-middleware

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

这是我到目前为止所做的:

Kernal.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,
    ],

CheckTenant:

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');
    });

});

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

任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:0)

问题是您是否正在尝试将数据保存到配置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;

}