2016-05-14 31 views
2

在我的應用程序中,我希望在我的筆記本電腦APP_ENV=local上運行時禁用CSRF,並在開發中運行APP_ENV=dev。無法讓我的腦袋在如route.php或網絡中間件中如何實現。這裏是我的routes.php文件在Laravel中禁用基於環境的CSRF中間件

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

    Route::get('/', function() { 
     return view('welcome'); 
    })->middleware('guest'); 

    Route::group(['middleware' => 'auth'], function() 
    { 
     Route::resource('battles', 'BattlesController'); //, ['except' => ['index']]); 
     Route::resource('disputes', 'DisputesController'); 
     Route::resource('messages', 'MessagesController'); 
    }); 

}); 

我可以使用一些ENV文件加載魔術,以確保應用程序加載任何的.local.ev, .dev.env, .test.env, .production.env,但我還是要找到一種方法來確保網絡中間件包括CSRF不僅沒有在本地或時dev

回答

5

最簡單的方法是直接在中間件中禁用CSRF檢查。爲了做到這一點,您需要修改App \ Http \ Middleware \ VerifyCsrfToken類。添加有以下手柄()方法:

public function handle($request, \Closure $next) 
{ 
    if (in_array(env('APP_ENV'), ['local', 'dev'])) { 
     return $next($request); 
    } 

    return parent::handle($request, $next); 
} 
+0

看起來像一個好主意,但它給出了一個語法錯誤就行'如果(in_array(ENV(「APP_ENV」),[「當地」,「開發']){' –