在Laravel中基于环境禁用CSRF中间件

Ana*_*sra 4 php laravel laravel-routing laravel-5 laravel-5.2

在我的应用程序中,我想在我的笔记本电脑APP_ENV=local和开发上运行时禁用CSRF APP_ENV=dev.无法通过routes.php或网络中间件来了解如何做到这一点.这是我的routes.php

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

});
Run Code Online (Sandbox Code Playgroud)

我可以使用一些env文件加载魔法来确保应用程序加载任何一个.local.ev, .dev.env, .test.env, .production.env但我仍然必须找到一种方法来确保web中间件仅包含CSRF时不在本地或开发

jed*_*ylo 7

最简单的方法是直接在中间件中禁用CSRF检查.为此,您需要修改App\Http\Middleware\VerifyCsrfToken类.添加以下handle()方法:

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

    return parent::handle($request, $next);
}
Run Code Online (Sandbox Code Playgroud)