web-dev-qa-db-ja.com

小枝でCSRF入力をレンダリングする方法は?

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

42
Ondrej Slinták

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

93

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

{{ form_widget(formView._token) }} 

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

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

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

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

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

if ($this->isCsrfTokenValid('some-name', $submittedToken)) {
    // ... do something,
}
50
pliashkou

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

{{ form_row(form._token) }}

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

18
Anass

Delete操作に使用できるように、csrf入力を内部でTwig= 。@YuryPliashkouの答えに従って{{ csrf_token('authenticate') }}を使用すると、間違ったトークン(ログインにのみ有効なトークン)が返されます。

私のために働いたのは、この{{ 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 
   }
});

Symfony 3.x.での動作を確認しました

参照

4
Niket Pathak

私の解決策がうまくいかなかった、例で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()を機能的に使用します

1
Vladimir Ch