路由到 API 中间件 Laravel 5.2.35 时总是调用 VerifyCsrfToken

VerifyCsrfToken always called when route to API Middleware Laravel 5.2.35

我有两个类似的 Laravel 项目。这是 kernel.php 的部分代码。两个项目都有相同的代码。

protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
    ],
    'api' => [
        'throttle:60,1',
    ],
];

但是,尽管我将路由放在 api middlewareGroup 中,但始终会调用 VerifyCsrfToken。

我在高级 REST 客户端中检查请求 header。我找到了这个。

第一个项目结果:

第二个项目结果:

第一个结果在请求中有 cookie 属性 header,但第二个结果没有

使用没有任何中间件的路由,它不再需要 csrf 令牌。

routes.php 中的所有路由都包含在应用了 'web' 中间件的路由组中。您可能应该创建另一个路由文件,并让 RouteServiceProvider 在 'api' 且不应用 'web' 中间件的情况下加载这些路由文件。

如果你打开你的 RouteServiceProvider 你会看到这是在哪里发生的。检查 map 方法以查看它调用 mapWebRoutes.

您可以通过将 URI 添加到 $except 属性 来跳过对 app/Http/Middleware/VerifyCsrfToken.php 中所有 api 链接的 csrf 令牌检查。示例:

protected $except = [
    '/api/*'
];