在我的应用程序中,我想在我的笔记本电脑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时不在本地或开发
答案 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;
...