symfony2 CSRF无效

Jus*_*tin 21 csrf symfony

好的,今天我用我们的'实时'数据库中的新信息更新了我的数据库...从那以后我一直在我的一个表单上遇到问题.如果您需要任何代码,请告诉我,我将对此进行编辑并发布所需的代码...

我有一个报表,其中包含日期范围字段和代理部门的下拉列表.当我第一次访问该页面时,我在表单的开头看到了这个:

The CSRF token is invalid. Please try to resubmit the form

所以我转到我的其他一个具有相同类型信息的表单,并检查_token,这就是出现的结果:

<input type="hidden" id="ecs_crmbundle_TimeClockReportType__token" name="ecs_crmbundle_TimeClockReportType[_token]" value="87e358fbc4d6d3e83601216b907a02170f7bcd92" />
<input type="hidden" id="ecs_crmbundle_SimpleSalesReportType__token" name="ecs_crmbundle_SimpleSalesReportType[_token]" value="87e358fbc4d6d3e83601216b907a02170f7bcd92" />
Run Code Online (Sandbox Code Playgroud)

第一个是显示错误的那个,SimpleSalesReport没有...任何想法为什么这样做或我如何解决它?

谢谢..

dyl*_*ver 26

您是否偶然在产生CSRF错误的操作中使用$ form-> bindRequest()?我有这个问题.您不应该绑定新表单的请求.如果要将表单发布到同一操作,请将bindRequest包装在条件中,以检查方法是否为POST:

if ($this->getRequest()->getMethod() == 'POST') {
  $form->bindRequest($this->getRequest());
  if ($form->isValid()) {
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 另外,请记住在底部添加form_rest(form)作为表单中的最后一个字段.Symfony负责使用该语句为您插入CSRF令牌.http://symfony.com/doc/current/book/forms.html#rendering-a-form-in-a-template (22认同)
  • 这个男人是天才!这是我正在做的事情......但是你来了,救了一天! (3认同)
  • 也可以使用`$ this-> getRequest() - > isMethod('POST')`. (2认同)

Mar*_*hli 22

使用{{ form_widget(form) }}构建自定义表单没有问题.你所要做的就是添加_token如下: {{ form_widget(form._token) }}


Mat*_*uke 18

这个错误让我疯了几天!谢谢克里希纳!如果你在表单模板中选择不使用默认表单行为,{{ form_widget(form) }}你应该把{{ form_rest(form) }} 希望这可以帮助其他人!