symfony2 CSRF无效

时间:2012-05-04 04:56:59

标签: symfony csrf

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

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

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" />

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

谢谢..

3 个答案:

答案 0 :(得分:26)

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

if ($this->getRequest()->getMethod() == 'POST') {
  $form->bindRequest($this->getRequest());
  if ($form->isValid()) {
    ...
  }
}

答案 1 :(得分:22)

使用{{ form_widget(form) }}构建自定义表单没有问题。 您所要做的就是像这样添加_token{{ form_widget(form._token) }}

答案 2 :(得分:18)

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