[扩展推荐] Laravel-caffeine 让你的 CSRF Token 永不过期(TokenMismatchException)

Laravel

目标

如果你的项目中有一个较长的表单需要填写,那么会花费你很多的时间。如果它隐藏在用户会话下面,那么它将会超时,默认情况下,有 120 分钟。看起来时间似乎足够了,但是如果用户让表单页面打开时间更长,去喝杯咖啡或者做些其他的,然后过一会再完成它,那么该怎么办呢?

答案是: https://github.com/GeneaLabs/laravel-caffeine

这个包可以防止表单在屏幕上停留相当长的时间后提交超时。

实现

为了达到这个目的,我们发送一个 caffeine-drip (一个定期请求),以防止会话超时。这仅在具有 _token 字段页面上实现,因此,所有其他页面将正常超时。

推理

我选择这种方法是为了避免以下情况,从而保证站点安全性的完整性:

  • 在不安全的端点上公开 CSRF 令牌。
  • 消除指定路由上的 CSRF 令牌验证,甚至完全消除。
  • 移除所有页面上的会话超时。

注意事项

路由

这个包添加了 genealabs/laravel-caffeine 下面的路由。

安装

对于 Laravel 5.2 ,请遵循说明
说明: https://github.com/GeneaLabs/laravel-caffeine/tree/166e2ca08af7cc62a59360f33e03d1cb8478df6a

  1. 安装包:

    composer require genealabs/laravel-caffeine
  2. 这仅适用与 Laravel 5.4 或以下版本: 在 config/app.php 中添加服务提供者条目:

    // 'providers' => [
        GeneaLabs\LaravelCaffeine\Providers\Service::class,
    // ],
  3. 如果你运行 5.5 或者更高的版本,请从 config/app.php 中删除 providers 条目。

  4. 如果你以前注册过中间件,请从 app/Http/Kernel.php 中删除以下中间件:

    // protected $middleware = [
        GeneaLabs\LaravelCaffeine\Http\Middleware\LaravelCaffeineDripMiddleware::class,
    // ];
  5. 只有在需要自定义配置文件时才发布配置文件
    php artisan caffeine:publish --config

使用

就是这样!当页面在浏览器中打开时,它发现一个带有 _token 字段或名为 csrf-token 元标记的表单时,它将自动应用自己。

禁止应用

默认是全局应用的,如果你想控制 caffeine 的使用,这里有两种方法:

  • 使用在 Blade 中使用 禁用 meta 标签;
  • 启动路由中间件模式,然后在路由中单独启用。

Meta 标记方法

如果你希望阻止某个页面的 caffeine 使用,可以在此页面中新增 meta 标记:

<meta name="caffeinated" content="false">

路由中间件方法

若要启用该模式,需要你发布配置文件(参阅上面的配置部分),然后将 use-route-middleware 值改为 true

这将禁用默认的全局中间件模式(该模式应用于整个应用程序中包含 CSRF 令牌的任何页面)。现在,你需要使用路由中间件在给定的路由或路由组中选择性的启用 Caffeine :

Route::any('test', 'TestController@test')->middleware('caffeinated');

Route::group(['middleware' => ['caffeinated']], function () {
    Route::any('test', 'TestController@test');
})

你仍然可以使用 route 中间件方法,并通过编辑 app/Http/Kernel.php 将其应用于所有路由,并将其添加至 web 中间件组。

你应该只有在非常特定的用例中,需要弃用默认的全局中间件选项时,才使用此选项。

最后需要强调的是:只有当页面包含表单时 caffeine 才会生效,如果没有,将不会修改你的应用程序。


Practice makes perfect.

原文地址:https://github.com/GeneaLabs/laravel-caf...

译文地址:https://learnku.com/laravel/t/27399

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 3

请教大家一个问题,在翻译第四段的时候, Caffeination 不是很理解,直译的话为:咖啡因 的意思,我根据上下文的意思我翻译成了占用,所以在这里请教下大家, Caffeination 一词在文中应该翻译成什么意思

1周前
Summer

@sayhe110 我稍作修改,你瞧瞧哈

1周前

@Summer 语义上比“占用”好理解多了 :+1:

1周前

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!