2017-01-09 86 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