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

时间:2016-05-14 11:53:52

标签: php laravel laravel-5 laravel-5.2 laravel-routing

在我的应用程序中,我想在我的笔记本电脑APP_ENV=local和开发APP_ENV=dev上运行时禁用CSRF。无法通过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');
    });

});

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

2 个答案:

答案 0 :(得分:5)

最简单的方法是直接在中间件中禁用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);
}

答案 1 :(得分:0)

我在测试环境中遇到了类似的问题,可以通过关闭中间件来解决该问题:

class ExampleTest extends TestCase {
    use WithoutMiddleware;
    ...