Ondrej Slinták
Sé que existe la forma habitual de representar la entrada oculta del token CSRF con form_rest
pero hay una manera de hacer sólo Entrada CSRF en sí? he anulado {% block field_widget %}
en el tema para representar una pieza de texto adicional. Pero como el token CSRF también se representa en el campo de entrada y obtuve un texto que no necesito junto a un campo oculto. Así que me gustaría representarlo por separado con un argumento que le diga que no represente este texto.
puedes hacerlo con {{ form_widget(formView._token) }}
pliashkou
Si usted tiene formView
objeto, puede renderizarlo usando la función Twig:
{{ form_widget(formView._token) }}
Si no lo ha hecho, puede representar el 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 puedes usar el siguiente código en tu controlador (Symfony 3.x):
$submittedToken = $request->request->get('token');
if ($this->isCsrfTokenValid('some-name', $submittedToken)) {
// ... do something,
}
-
Es bueno saberlo, a veces esta es una función muy útil
– Luciano Mammino
8 oct 2014 a las 23:19
-
Lo siento, no funcionó para mí 🙁 Obtuve “Los tokens CSRF solo se pueden generar si se inyecta una CsrfTokenManagerInterface en FormRenderer::__construct()”. en Symfony 3.1. ¿Pero qué FormRenderer? No quiero usar ningún formulario.
– Xover
16 de septiembre de 2016 a las 14:16
-
Esto funciona para mí en Symfony 3.2. aunque usted hizo una declaración de que se supone que ‘authenticate’ es el nombre del formulario. No creo que esto sea cierto. Siempre debe ser ‘autenticar‘ si lo está utilizando para iniciar sesión. Controlar documentos oficiales para esto.
– Niket Pathak
25 de marzo de 2017 a las 2:04
-
@NiketPathak Gracias, actualicé la respuesta con nueva información.
– pliashkou
14 de agosto de 2018 a las 8:30
O simplemente puede usar esto:
{{ form_row(form._token) }}
Esto generará automáticamente los elementos HTML ocultos adecuados, es decir, la estructura HTML y los nombres de campo adecuados, según el tipo de formulario que esté utilizando.
Niket Pathak
Necesitaba renderizar la entrada csrf dentro de Twig para poder usarla para Borrar operaciones. Usando {{ csrf_token('authenticate') }}
según la respuesta de @YuryPliashkou, me da el token incorrecto (¡uno que solo es válido para iniciar 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
}
});
Verificado su funcionamiento en Symfony 3.x.
Referencia
vladimir ch
no encontré la solución que funcionó para mí, encontré y probé y funcionó para mi Simfony3 value=”{{ _token }}” en el ejemplo
<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í: Crear formularios manualmente en Symfony2, pero seguir usando su CSRF e isValid() funcionalmente