【问题标题】:Laravel 5 CSRF Token MismatchLaravel 5 CSRF 令牌不匹配
【发布时间】:2016-09-20 23:22:51
【问题描述】:

我对 Laravel 的 CSRF 令牌有一个恼人的错误。我正在使用 Laravel Collective 的 form 包。表单中的令牌值与提交页面上的预期值不同。

一些注意事项:

  1. 我已经创建并迁移了会话数据库表 (php artisan session:table)
  2. 我使用数据库来存储会话,而不是文件系统
  3. 正在数据库中创建记录。
  4. Form::open() 正在创建 CSRF 字段。我查看了该页面,并且该页面具有有效的 CSRF 值。
  5. 尽管我没有使用文件系统,但我已在 storage 目录上设置了正确的权限。
  6. 在我的路线文件中,我的路线使用Route::group(['middleware' => ['web']], function () {});分组的
  7. 在我的表单中,设置了 CSRF 令牌。但是,当我提交表单并 DD 存储在中间件会话表单中的 CSRF 令牌时,预期值与提交的值不同。
  8. 我在.env 文件中设置了SESSION_DRIVER=database
  9. 我已经完成了composer dumpphp artisan cache:clear 并删除了我的 cookie。
  10. 我已经用谷歌搜索过。我上过 Google、StackOverflow、laracasts、laravel、随机论坛,到目前为止,没有任何建议有效。

所以我的问题是这样的:

我有一个表格。在该表单中,我有一个隐藏的 _token 字段,它是一个有效的 CSRF 令牌。

当我使用标准 POST 请求(无 javascript / ajax)向服务器提交表单时,服务器期望的 CSRF 令牌与表单提供的不同。

换句话说,令牌似乎在表单中输出和中间件接收令牌之间发生变化。

考虑到上述注意事项,我还能做些什么来修复或调试问题,或者我可能错过了什么。

如果有人需要更多详细信息,请告诉我。

【问题讨论】:

  • 您是否尝试过使用默认功能创建令牌? {{ csrf_field() }} 也许 Form::open() 没有创建它吗?
  • 你作曲家最近更新了吗?中间件网络最近被删除了。
  • 我实际上在一周前遇到了同样的问题。突然之间,由于令牌不匹配异常,每个帖子都失败了。我删除了所有会话,清除了缓存。我还尝试了很多其他的东西(撤消工作等),但不知何故它消失了。一个好的第一步是将会话的 csrf 令牌与您在表单中看到的令牌进行比较。验证它们是否相同。
  • 你试过 php artisan config:clear 并重新生成 CSRF 代码
  • 为了帮助调试,请将文件系统权限设置为无效。这样一来,如果使用它,就会出现明显的错误。

标签: php laravel laravel-5.2 csrf


【解决方案1】:

如果您要添加 {{ csrf_file() }} 函数或类似的东西来提交它,但仍然收到此错误,则可能是 php 配置问题。您是否尝试在 POST 中提交文件?在命令行中键入 php --info | grep size 并检查 upload_max_filesize 的大小和 post_max_size 以确保它们足够大以容纳您的帖子数据。如果它们确实太小,请调整您的 php.ini 或 {laravel_directory}/public/.htaccess 文件以更改这些值。

【讨论】:

    猜你喜欢
    • 2016-10-15
    • 1970-01-01
    • 2020-07-08
    • 2016-12-10
    • 2020-01-20
    • 2020-06-17
    • 1970-01-01
    • 2020-05-02
    • 2020-04-14
    相关资源
    最近更新 更多