laravel: 无法接受没有 csrf 的 post 请求
laravel: can not accept post request without csrf
我已经添加到例外:
protected $except = [
'pay/finish'
];
但我还是得到 MethodNotAllowedException
路线在web.php
中定义
Route::post('/pay/finish', ['as' => 'pay.finish', 'uses' => 'PaymentController@finish']);
post 请求来自另一个域。
您通常不会从无效的 CSRF 令牌中获得 MethodNotAllowedException
。我通常会收到来自 CSRF 问题的 419 响应。
但是,假设 CSRF 令牌是问题所在,您可以将路线从 web.php
移至 api.php
。请注意,这会将前缀 api/
添加到 URL.
检查 CSRF 令牌的中间件在您的内核中应用于 web.php
中的所有路由,但不应用于 api.php
中的所有路由
您可以通过查看 App\Http\Kernel
文件并注释掉 \App\Http\Middleware\VerifyCsrfToken::class
from:
来验证 CSRF 检查是否真的是问题所在
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\Laravel\Passport\Http\Middleware\CreateFreshApiToken::class,
],
'api' => [
'throttle:60,1',
'bindings',
],
];
如果你的路由有效,它是 CSRF,你可以将路由移动到 API 路由文件,并在 api/pay/finish
处点击 api 前缀。
如果不是,那么我建议您查看是什么调用了您的路由,并检查调用了正确的 http 方法。确定是发送了POST
请求吗?
您是否在表单中指定了 _method
输入,Laravel 检查 POST
请求以将其突变为 PUT
或 PATCH
的编辑路径?
我已经添加到例外:
protected $except = [
'pay/finish'
];
但我还是得到 MethodNotAllowedException
路线在web.php
Route::post('/pay/finish', ['as' => 'pay.finish', 'uses' => 'PaymentController@finish']);
post 请求来自另一个域。
您通常不会从无效的 CSRF 令牌中获得 MethodNotAllowedException
。我通常会收到来自 CSRF 问题的 419 响应。
但是,假设 CSRF 令牌是问题所在,您可以将路线从 web.php
移至 api.php
。请注意,这会将前缀 api/
添加到 URL.
检查 CSRF 令牌的中间件在您的内核中应用于 web.php
中的所有路由,但不应用于 api.php
您可以通过查看 App\Http\Kernel
文件并注释掉 \App\Http\Middleware\VerifyCsrfToken::class
from:
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\Laravel\Passport\Http\Middleware\CreateFreshApiToken::class,
],
'api' => [
'throttle:60,1',
'bindings',
],
];
如果你的路由有效,它是 CSRF,你可以将路由移动到 API 路由文件,并在 api/pay/finish
处点击 api 前缀。
如果不是,那么我建议您查看是什么调用了您的路由,并检查调用了正确的 http 方法。确定是发送了POST
请求吗?
您是否在表单中指定了 _method
输入,Laravel 检查 POST
请求以将其突变为 PUT
或 PATCH
的编辑路径?