根据 Laravel 中的环境禁用 CSRF 中间件

disable CSRF middleware based on environment in Laravel

在我的应用程序中,我想在 运行 在我的笔记本电脑 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 但我仍然必须找到一种方法来确保网络中间件仅在不在本地或开发人员中时包含 CSRF

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

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

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

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

class ExampleTest extends TestCase {
    use WithoutMiddleware;
    ...