2017-01-09 38 views
1

我需要检查会话变量以在laravel中设置配置项。我需要这个在auth中间件之前运行。我尝试了各种配置来使其工作,但无论如何,auth在我设置数据库之前运行,因此无法找到用户。在laravel 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'); 
    }); 

}); 

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

任何帮助将非常感激。

回答

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; 

} 
+0

的验证中间件似乎仍然在这之前是运行? – jhodgson4