Как сделать CSRF вход в веточку? - PullRequest
42 голосов
/ 19 сентября 2011

Я знаю, что есть обычный способ отрисовки скрытого ввода токена CSRF с помощью form_rest, но есть ли способ отрисовки только самого ввода CSRF?Я переопределил {% block field_widget %} в теме, чтобы отобразить фрагмент дополнительного текста.Но так как токен CSRF отображается и в поле ввода, и у меня есть фрагмент текста, мне не нужно рядом со скрытым полем.Поэтому я хотел бы отобразить его отдельно с аргументом, который запрещает отображать этот текст.

Ответы [ 5 ]

93 голосов
/ 20 сентября 2011

вы можете сделать это с {{ form_widget(formView._token) }}

50 голосов
/ 26 января 2014

Если у вас есть 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,
}
18 голосов
/ 26 ноября 2014

Или вы можете просто использовать это:

{{ form_row(form._token) }}

Это автоматически сгенерирует правильные скрытые элементы HTML, то есть правильную структуру HTML и имена полей, в соответствии с типом формы, которую вы используете.

4 голосов
/ 25 марта 2017

Мне нужно было визуализировать ввод csrf внутри Twig, чтобы я мог использовать его для операций Delete .Использование {{ 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 
   }
});

Проверена его работоспособность на Symfony 3.x.

Ссылка

1 голос
/ 30 сентября 2016

не нашел решение, которое сработало для меня, нашло и протестировало, и сработало для моего значения Simfony3 = "{{_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 ()

...