【问题标题】:VerifyCsrfToken always called when route to API Middleware Laravel 5.2.35路由到 API 中间件 Laravel 5.2.35 时始终调用 VerifyCsrfToken
【发布时间】:2016-09-29 15:33:31
【问题描述】:

我有两个类似的 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',
    ],
];

但是,VerifyCsrfToken 总是被调用,尽管我将我的路由放在 api middlewareGroup 中。

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

第一个项目结果:

第二个项目结果:

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

【问题讨论】:

标签: laravel cookies header request csrf


【解决方案1】:

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

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

【讨论】:

  • 你的回答是对的。但我对一切都很好奇。因为一切都是相似的。第二个项目没有异常变量,但可以排除csrftoken。
  • 两个项目在您的 .env 文件中具有相同的 SESSION_DRIVER 值?检查您的会话设置,可能您将其存储在文件中,但忘记正确设置权限。
【解决方案2】:

routes.php 中的所有路由都包含在应用了“web”中间件的路由组中。您可能应该创建另一个路由文件,并让 RouteServiceProvider 将这些路由加载到一个组中,并使用 'api' 而没有应用 'web' 中间件。

如果您打开您的 RouteServiceProvider,您将看到发生这种情况的位置。检查map 方法,看看它调用了mapWebRoutes

【讨论】:

  • 我不知道我的第一个RouteServiceProvider.php 和第二个RouteServiceProvider.php 有不同的代码
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2017-07-03
    • 2015-09-22
    • 1970-01-01
    • 2021-03-20
    • 2019-12-27
    • 1970-01-01
    • 2020-01-20
    • 2019-08-19
    • 2020-03-23
    相关资源
    最近更新 更多