如何为具有动态参数的路由禁用 csrf 保护?

How to disable csrf protection for a route with dynamic parameter?

我有一条路线,在 URL 的末尾有一个动态参数。在这条路线中,我使用 post 方法获取从外部 API 发送的数据。由于外部API发送post请求时出现419 page expired错误,我需要关闭此路由的csrf保护

相关路线:

Route::group(['middleware' => ['auth:student']], function (){
    Route::post('Result', 'ExamController@Result')->name('exam.Result');
}

我的URL例子:

http://localhost.dev/student/Result?Id=N7utfGkwOLebxMWGA5iUC4S23jgRzW

我试图在 VerifyCsrfToken 文件中添加此代码 App\Http\Middleware:

protected $except = [
'student/Result/*',
];

没用。但是当我尝试 student/* 时,它运行得很好。但是,禁用所有 student 路径的 csrf 保护并不是我想要的。

我也通过在 this thread:

上获取参考来尝试这种方式
Route::post('Result', [
      'uses' => 'ExamController@Result',
      'nocsrf' => 'true'
    ])->name('exam.Result');

那也没用。

如何在这种情况下禁用 csrf 保护?

试试这个(去掉斜杠和星号):

protected $except = [
'student/Result',
];

您在 App\Http\Middleware 处输入错误,而不是:

protected $except = [
'student/Result/*',
];

您需要使用:

protected $except = [
'student/Result',
];

此外,基于documentation您可以指定需要排除的完整url:

protected $except = [
'http://localhost.dev/student/Result',
];

请注意,您不需要在此处添加路由的参数部分(? 符号后的所有内容,例如 ?Id=N7utfGkwOLebxMWGA5iUC4S23jgRzW)。