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

Laravel

目标

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

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

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

实现

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

推理

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

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

注意事项

路由

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

安装

对于 Laravel 5.2 ,请遵循说明
说明: https://github.com/GeneaLabs/laravel-caffe...

  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 才会生效,如果没有,将不会修改你的应用程序。

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

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

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

本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 3

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

5年前 评论
Summer

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

5年前 评论

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

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!