Cómo renderizar la entrada CSRF en twig?


Sé que existe la forma habitual de renderizar la entrada oculta del token CSRF con form_rest, pero ¿hay una forma de renderizar solo la entrada CSRF en sí? He anulado {% block field_widget %} en theme para renderizar un fragmento de texto adicional. Pero como CSRF token se representa en el campo de entrada también y tengo un pedazo de texto que no necesito al lado de un campo oculto. Así que me gustaría renderizarlo por separado con un argumento que le diga que no renderice este texto.

Author: Ondrej Slinták, 2011-09-19

5 answers

Puedes hacerlo con {{ form_widget(formView._token) }}

 86
Author: Henrik Bjørnskov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-20 18:16:32

Si tienes un objeto formView, puedes renderizarlo usando la función Twig:

{{ form_widget(formView._token) }} 

Si no lo ha hecho, puede renderizar token sin usar el objeto de formulario directamente:

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

Funciona en Symfony 2.x y 3.x

Para validar el token puede usar el siguiente código en su controlador (Symfony 3.x):

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

if ($this->isCsrfTokenValid('some-name', $submittedToken)) {
    // ... do something,
}
 48
Author: pliashkou,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-14 08:33:45

O simplemente puedes usar esto:

{{ form_row(form._token) }}

Esto generará automáticamente los elementos HTML ocultos adecuados, es decir, la estructura HTML adecuada y los nombres de campo, de acuerdo con el tipo de formulario que esté utilizando.

 17
Author: Anass,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-26 15:51:24

Necesitaba renderizar la entrada csrf dentro de Twig para poder usarla para Borrar operaciones. Usar {{ csrf_token('authenticate') }} según la respuesta de @YuryPliashkou me da el token incorrecto (¡uno que solo es válido para inicios de sesión!)

Lo que funcionó para mí fue esto {{ csrf_token('form') }} lo que me da el token csrf correcto que luego pasaría a mi controlador a través de 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 
   }
});

Verificó su funcionamiento en Symfony 3.x.

Referencia

 4
Author: Niket Pathak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:47:30

Didn't find solution worked for me, finded and tested and worked for my Simfony3 value= "{{_token}} " in example

     <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>

Se puede ver más sobre scrf aquí: Creando formularios manualmente en Symfony2, pero aún así usar sus funciones CSRF e isValid ()

 1
Author: Vladimir Ch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:18:24