CSRFトークンの非表示の入力をでレンダリングする通常の方法があることは知っていますが、 CSRF入力自体だけform_rest
をレンダリングする方法はありますか?追加のテキストをレンダリングするためにテーマをオーバーライドしました。しかし、CSRFトークンも入力フィールドにレンダリングされ、非表示フィールドの横に必要のないテキストが表示されるためです。したがって、このテキストをレンダリングしないように指示する引数を使用して、個別にレンダリングしたいと思います。{% block field_widget %}
5 に答える
あなたはそれを行うことができます{{ form_widget(formView._token) }}
オブジェクトがある場合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,
}
または、単にこれを使用することができます:
{{ form_row(form._token) }}
これにより、使用しているフォームのタイプに応じて、適切な非表示のHTML要素、つまり適切なHTML構造とフィールド名が自動的に生成されます。
削除操作に使用できるように、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での動作を確認しました。
例では、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()を機能的に使用します