我創建了一個Symfony2表單並將其綁定到請求。在繼續執行表單的其餘部分之前,我需要明確確認CSRF令牌是否有效/無效。如何在Symfony2中檢查提供的CSRF令牌是否無效?
$form['_token']->isValid()
引發OutOfBoundsException
帶有消息「Child _token does not exist」。
我仍然可以驗證呈現的表單是否包含_token
字段。如果CSRF值無效,則$form->isValid()
返回false。
我在這裏錯過了什麼?
更新1:
控制器(部分):
private function buildTestForm() {
$form = $this->createFormBuilder()
->add('name','text')
->getForm();
return $form;
}
/**
* @Route("/test/show_form", name="test.form.show")
* @Method("GET")
*/
public function showFormTest()
{
$form = $this->buildTestForm();
return $this->render('TestBundle::form_test.html.twig', array('form' => $form->createView()));
}
/**
* @Route("/test/submit_form", name="test.form.submit")
* @Method("POST")
*/
public function formTest()
{
$form = $this->buildTestForm();
$form->bind($this->getRequest());
if ($form['_token']->isValid()) {
return new Response('_token is valid');
} else {
return new Response('_token is invalid');
}
}
模板
{# Twig template #}
<form action="{{ path('test.form.submit') }}" method="post" {{ form_enctype(form) }}>
{{ form_widget(form) }}
<input type="submit" name="go" value="Test Form" />
</form>
您至少缺少表格代碼。 – mpm 2013-02-23 19:50:25
@mpm,true - 現在添加完整的代碼來重現問題。 – 2013-02-23 21:56:15
CSRF令牌驗證自動完成http://symfony.com/doc/current/book/forms.html#csrf-protection – 2013-02-23 22:00:20