web-dev-qa-db-ja.com

symfony2 CSRFが無効です

さて、今日は「ライブ」データベースの新しい情報でデータベースを更新しました...それ以来、私のフォームの1つで問題が発生しています。コードが必要な場合はお知らせください。これを編集して、必要なコードを投稿します...

日付範囲フィールドとエージェント部門のドロップダウンがあるレポートフォームがあります。最初にページにアクセスしたとき、フォームの最初にこれが表示されます。

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

だから私は同じタイプの情報を持つ私の他のフォームの1つに行き、_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はそうではありません...これがなぜこれを行っているのか、またはどのように私はそれを修正できるのでしょうか?

ありがとう。

21
Justin

CSRFエラーを生成するアクションで$ form-> bindRequest()を使用していますか?私はこの問題を抱えていました。新しいフォームのリクエストをバインドするべきではありません。フォームを同じアクションに投稿する場合は、bindRequestを条件付きでラップし、メソッドがPOSTかどうかを確認します。

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

{{ form_widget(form) }}を使用してカスタムフォームを作成しても問題はありません。あなたがしなければならないのは、次のように__token_を追加することだけです:{{ form_widget(form._token) }}

22
Marc Juchli

このエラーは何日も私を狂わせました!クリシュナありがとう!フォームテンプレートで、デフォルトのフォーム動作{{ form_widget(form) }}を使用しないことを選択した場合は、{{ form_rest(form) }}を配置する必要があります_これが他の人に役立つことを願っています!

18
MatuDuke