2014-04-23 11 views
0

Привет, я разработал приложение с symfony2 и AngularJS. У меня есть форма, которую я отправляю с помощью $ http service за сообщение. Пример формы входа и регистрационной формы.Символ symfony2 csrf недействителен по запросу ajax

Ошибка, я получаю ее классический токен CSRF недействительным, и это происходит при повторной отправке формы.

В первый раз, когда форма отправляет процесс хорошо, вход в систему или регистрация; но если я выйду из системы и попробую повторно отправить форму с теми же данными для входа в систему, я получу ошибку недействительного токена csrf.

в попытке регенерировать маркер, если форма его занесена с:

$ this-> получить ('form.csrf_provider') -> generateCsrfToken ('Authenticate');

и замените его на вид, чтобы в следующий раз, когда у формы появится новый токен для отправки, но я получаю ту же ошибку.

что я делаю неправильно?

+0

Нужно ли повторно отображать форму для каждого запроса? – Kiksy

+0

нет, идея о том, что форма его всегда присутствует или проявляется или скрывается в подключенном к регистру div пользовательском меню, она будет скрываться или отображаться в зависимости от зарегистрированного состояния пользователя. – bitgandtter

+0

Вы проверили, что токен CSRF действительно изменяется между запросы? – sebbo

ответ

0

Я знаю, что вы задали этот вопрос давным-давно, но сегодня я столкнулся с той же проблемой, решение которой было довольно простым. Если вы создаете форму другим узлам, убедитесь, что form_start находится в том же узле, что и form_end. В моем случае это выглядело так:

<div> 
{{form_start(form)}} 
... some form inputs 
</div> 
{{form_end(form)}} 

Как вы, наверное, знаете, что form_end делает маркер (в последнее Symfony), и в результате, маркер был вне формы.

Как это происходит при попытке изменить форму, я думаю, это потому, что у вас есть другой шаблон для переопределенной формы (например, с ошибками), поэтому убедитесь, что ваша иерархия HTML действительна.

Надеюсь, что это поможет кому-то в будущем. Ура!

Смежные вопросы