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


Practice makes perfect.

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

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

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 3

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

2个月前 评论
Summer

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

2个月前 评论

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

2个月前 评论

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

社区文档:

将托管在 packagist.org 和 github.com 的扩展包使用国内 CDN 加速
GitHub Laravel 扩展包 TOP 250
速查表方便快速查询框架功能,支持手机访问,支持中英文版本
Laravel 中文文档,由社区用户翻译和维护,将会保持一直更新
此文档的目的,就是为了提高技术团队的凝聚力、一致性和生产效率。
开发环境的部署,开发者工具的选择,适用于 Mac 和 Windows。
浓缩过后的精华
Laravel Nova 后台管理面板文档的中文翻译
Lumen 中文文档,由社区用户翻译和维护,将会保持一直更新
Laravel 下知名扩展包 Dingo API 的中文文档,Laravel API 开发必知必会