首页 文章

Laravel 5 CSRF令牌不匹配

提问于
浏览
2

我've an annoying error with Laravel'的CSRF代币 . 我'm using the Laravel Collective' s form 包 . 表单中的标记值与提交的页面上的标记值不同 .

一些注意事项:

  • 我创建并迁移了会话数据库表( php artisan session:table

  • 我正在使用数据库来存储会话,而不是文件系统

  • 正在数据库中创建记录 .

  • Form::open() 正在创建CSRF字段 . 我查看了该页面,并且它具有有效的CSRF值 .

  • 即使我没有使用文件系统,我也在 storage 目录上设置了正确的权限 .

  • 在我的路线文件中,我的路线使用 Route::group(['middleware' => ['web']], function () {}); 进行分组

  • 在我的表单中,设置了CSRF令牌 . 但是,当我在中间件中提交存储在会话表单中的表单和DD CSRF令牌时,预期值与提交的值不同 .

  • 我在 .env 文件中设置了 SESSION_DRIVER=database

  • 我做了 composer dumpphp artisan cache:clear 并删除了我的cookies .

  • 我用谷歌搜索了一下 . 我一直在谷歌,StackOverflow,laracasts,laravel,随机论坛,到目前为止没有任何建议 .

所以我的问题是这样的:

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

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

换句话说,似乎令牌在表单内输出时以及中间件接收时都会发生变化 .

考虑到上述考虑因素,我还可以做些什么来修复或调试问题,或者我可能错过了什么 .

如果有人需要额外的细节,请告诉我 .

1 回答

  • 0

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

相关问题