如何为具有动态参数的路由禁用 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
)。
我有一条路线,在 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
)。