【发布时间】:2016-09-20 23:22:51
【问题描述】:
我对 Laravel 的 CSRF 令牌有一个恼人的错误。我正在使用 Laravel Collective 的 form 包。表单中的令牌值与提交页面上的预期值不同。
一些注意事项:
- 我已经创建并迁移了会话数据库表 (
php artisan session:table) - 我使用数据库来存储会话,而不是文件系统
- 正在数据库中创建记录。
-
Form::open()正在创建 CSRF 字段。我查看了该页面,并且该页面具有有效的 CSRF 值。 - 尽管我没有使用文件系统,但我已在
storage目录上设置了正确的权限。 - 在我的路线文件中,我的路线是使用
Route::group(['middleware' => ['web']], function () {});分组的 - 在我的表单中,设置了 CSRF 令牌。但是,当我提交表单并 DD 存储在中间件会话表单中的 CSRF 令牌时,预期值与提交的值不同。
- 我在
.env文件中设置了SESSION_DRIVER=database - 我已经完成了
composer dump、php artisan cache:clear并删除了我的 cookie。 - 我已经用谷歌搜索过。我上过 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