Utworzyłem formularz Symfony2 i powiązałem go z Żądaniem. Muszę jednoznacznie upewnić się, że token CSRF jest ważny/nieważny przed przystąpieniem do dalszej części formularza.Jak mogę sprawdzić, czy dostarczony token CSRF jest nieprawidłowy w Symfony2?
$form['_token']->isValid()
wyrzuca OutOfBoundsException
z komunikatem "Dziecko _token nie istnieje".
Nadal mogę sprawdzić, czy renderowany formularz zawiera pole _token
. W przypadku, gdy wartość CSRF jest nieważna, $form->isValid()
zwraca wartość false.
Czego mi tu brakuje?
aktualizacji 1:
kontroler (częściowe)
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');
}
}
Szablon
{# 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>
brakuje co najmniej kodu formularza. – mpm
@mpm, true - teraz dodano pełny kod, aby odtworzyć problem. –
Sprawdzanie tokenu CSRF odbywa się automatycznie http://symfony.com/doc/current/book/forms.html#csrf-protection –