laravel:没有csrf不能接受发布请求

问题描述 投票:1回答:1

我添加了例外:

    protected $except = [
        'pay/finish'
    ];

但是我仍然得到MethodNotAllowedException

路由在web.php中定义

Route::post('/pay/finish', ['as' => 'pay.finish', 'uses' => 'PaymentController@finish']);

发布请求来自另一个域。

laravel post http-post csrf
1个回答
0
投票

您通常不会从无效的CSRF令牌中获得MethodNotAllowedException

但是,假设CSRF令牌是问题,您可以将路由从web.php移至api.php。请注意,这会将前缀api/添加到URL。

检查CSRF令牌的中间件已在您的内核中应用于web.php中的所有路由,但不应用于api.php中的所有路由>

您可以通过查看App\Http\Kernel文件并从以下位置注释掉\App\Http\Middleware\VerifyCsrfToken::class来验证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前缀在api/pay/finish处将其命中。

如果没有,那么我建议您查看正在调用的路由,并检查是否调用了正确的http方法。肯定是发送发帖请求吗?您是否具有_method' input specified in your form that Laravel checks for POSTrequests to mutate them toPUTorPATCH`的编辑路径?

© www.soinside.com 2019 - 2024. All rights reserved.