web-dev-qa-db-fra.com

symfony2 CSRF invalide

D'accord, donc aujourd'hui, j'ai mis à jour ma base de données avec de nouvelles informations de notre base de données "en direct" ... Et depuis, j'ai eu des problèmes sur l'un de mes formulaires. Si vous avez besoin d'un code, faites-le moi savoir et je le modifierai et publierai le code nécessaire ...

J'ai un formulaire de rapport qui a un champ de plage de dates et une liste déroulante pour un service d'agent. Lorsque je visite la page pour la première fois, je vois ceci au début du formulaire:

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

Je vais donc à l'un de mes autres formulaires qui a le même type d'informations, et vérifie le _token et voici ce qui sort:

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

Le premier est celui qui montre l'erreur, et le SimpleSalesReport ne le fait pas ... Une idée pourquoi cela fait-il cela ou comment je peux le réparer?

Merci..

21
Justin

Utilisez-vous par hasard $ form-> bindRequest () dans l'action qui produit l'erreur CSRF? J'ai eu ce problème. Vous ne devez pas lier la demande d'un nouveau formulaire. Si vous publiez le formulaire dans la même action, encapsulez le bindRequest dans un conditionnel qui vérifie si la méthode est POST:

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

Il n'y a aucun problème à utiliser {{ form_widget(form) }} pour créer votre formulaire personnalisé. Tout ce que vous avez à faire est d'ajouter le _token Comme ceci: {{ form_widget(form._token) }}

22
Marc Juchli

Cette erreur m'a rendu fou pendant des jours! Merci krishna! Si dans votre modèle de formulaire vous choisissez de ne pas utiliser le comportement de formulaire par défaut {{ form_widget(form) }} vous DEVRIEZ mettre {{ form_rest(form) }} J'espère que cela pourrait aider quelqu'un d'autre!

18
MatuDuke