45

CSRFトークンの非表示の入力をでレンダリングする通常の方法があることは知っていますが、 CSRF入力自体だけform_restをレンダリングする方法はありますか?追加のテキストをレンダリングするためにテーマをオーバーライドしました。しかし、CSRFトークンも入力フィールドにレンダリングされ、非表示フィールドの横に必要のないテキストが表示されるためです。したがって、このテキストをレンダリングしないように指示する引数を使用して、個別にレンダリングしたいと思います。{% block field_widget %}

4

5 に答える 5

101

あなたはそれを行うことができます{{ form_widget(formView._token) }}

于 2011-09-20T18:16:32.160 に答える
54

オブジェクトがある場合formViewは、Twig関数を使用してレンダリングできます。

{{ form_widget(formView._token) }} 

まだ行っていない場合は、フォームオブジェクトを直接使用せずにトークンをレンダリングできます。

<input type="hidden" name="token" value="{{ csrf_token('some-name') }}">

Symfony2.xおよび3.xで動作します

トークンを検証するには、コントローラー(Symfony 3.x)で次のコードを使用できます。

$submittedToken = $request->request->get('token');

if ($this->isCsrfTokenValid('some-name', $submittedToken)) {
    // ... do something,
}
于 2014-01-26T16:28:57.027 に答える
20

または、単にこれを使用することができます:

{{ form_row(form._token) }}

これにより、使用しているフォームのタイプに応じて、適切な非表示のHTML要素、つまり適切なHTML構造とフィールド名が自動的に生成されます。

于 2014-11-26T15:51:24.950 に答える
4

削除操作に使用できるように、Twig内でcsrf入力をレンダリングする必要がありました。{{ csrf_token('authenticate') }}@YuryPliashkouの回答に従って使用すると、間違ったトークンが表示されます(ログインにのみ有効なトークンです!)

私にとってうまくいったのは、{{ csrf_token('form') }}これが正しいcsrfトークンを与えてくれ、それをajax経由でコントローラーに渡すことでした。

<span id="csrf_token" data-token="{{ csrf_token('form') }}"></span> 
// my ajax call
$.ajax({
    url: localhost/admin/product/4545,   // 4545->id of the item to be deleted
    type: 'POST',
    data: {
        "_method": "DELETE",
        "form[_token]": $("#csrf_token").data("token")   // passed csrf token here
    },
    success: function(result) {
        // Do something 
   }
});

Symfony3.xでの動作を確認しました。

参照

于 2017-03-25T02:24:41.480 に答える
1

例では、Simfony3 value = "{{_token}}"で解決策が機能することを確認し、テストして機能することがわかりませんでした。

     <form name="form" method="post" action="{{ path('blog_show', { 'id': blog.id }) }}">
       <input name="_method" value="DELETE" type="hidden">
       <input class="btn btn-danger" value="Delete" type="submit">
       <input id="form__token" name="form[_token]" value="{{ _token }}" type="hidden">
    </form>

scrfの詳細については、こちらをご覧ください:Symfony2で手動でフォームを作成しますが、CSRFとisValid()を機能的に使用します

于 2016-09-30T04:38:14.233 に答える