válido try traductor traducir the significa resubmit que pruebe por please nuevamente invalid formulario form favor español enviar php symfony twig

php - traductor - the csrf token is invalid. please try to resubmit the form. traducir



El token CSRF no es válido. Intente volver a enviar el formulario (13)

Además de las sugerencias de los demás, puede obtener errores de token CSRF si el almacenamiento de la sesión no funciona.

En un caso reciente, un colega mío cambió ''session_prefix'' a un valor que tenía un espacio en él.

session_prefix: ''My Website''

Esto rompió el almacenamiento de la sesión, lo que a su vez significó que mi formulario no pudo obtener el token CSRF de la sesión.

Recibo este mensaje de error cada vez que intento enviar el formulario:

El token CSRF no es válido. Intente volver a enviar el formulario

Mi código de formulario es este:

<form novalidate action="{{path(''signup_index'')}}" method="post" {{form_enctype(form)}} role="form" class="form-horizontal"> <div class="form-group"> {{ form_label(form.email, ''Email'', {''label_attr'': {''class'': ''col-md-1 control-label''}}) }} {{ form_widget(form.email, {''attr'': {''class'': ''col-md-2''}}) }} {{ form_errors(form.email) }} </div> <div class="form-group"> {{ form_label(form.nickname, ''Nickname'', {''label_attr'': {''class'': ''col-md-1 control-label''}}) }} {{ form_widget(form.nickname, {''attr'':{''class'': ''col-md-2''}}) }} {{ form_errors(form.nickname, {''attr'': {''class'': ''col-md-3''}}) }} </div> <div class="form-group"> {{ form_label(form.password, ''password'', {''label_attr'': {''class'': ''col-md-1 control-label''}}) }} {{ form_widget(form.password, {''attr'': {''class'': ''col-md-2''}}) }} {{ form_errors(form.password, {''attr'': {''class'': ''col-md-3''}}) }} </div> <div class="form-group"> {{ form_label(form.password_repeat, ''Repeat password'', {''label_attr'': {''class'': ''col-md-1 control-label''}}) }} {{ form_widget(form.password_repeat, {''attr'':{''class'': ''col-md-2''}}) }} {{ form_errors(form.password_repeat, {''attr'': {''class'': ''col-md-3''}}) }} </div> <div class="form-group"> <div class="col-md-1 control-label"> <input type="submit" value="submit"> </div> </div> </form>

¿Algunas ideas?


Antes de colocar su etiqueta </form> :

{{ form_rest(form) }}

Insertará automáticamente otras entradas importantes (ocultas).


En caso de que no quiera usar form_row o form_rest y solo quiera acceder al valor de _token en su plantilla twig. Use lo siguiente:

<input type="hidden" name="form[_token]" value="{{ form._token.vars.value }}" />


En mi caso, tuve un problema con la anotación maxSize en la entidad, por lo que la aumenté de 2048 a 20048.

/** * @Assert/File( * maxSize = "20048k", * mimeTypes = {"application/pdf", "application/x-pdf"}, * mimeTypesMessage = "Please upload a valid PDF" * ) */ private $file;

Espero que esta respuesta ayude!


Enfrenté un problema similar. Después de asegurarse de que el campo de token se haya renderizado en realidad (ver respuesta aceptada) revisé mis cookies. Había 2 (!) Cookies para el dominio en mi navegador Chrome, aparentemente porque estaba ejecutando la aplicación en el mismo dominio que otra aplicación, pero con un puerto diferente (es decir, midominio.com configuró la cookie original mientras se ejecutaba la aplicación con errores en mydomain.com:123) Ahora aparentemente Chrome envió la cookie incorrecta para que la protección CSRF no pudiera vincular el token a la sesión correcta.

Solución: borre todas las cookies para el dominio en cuestión, asegúrese de no ejecutar múltiples aplicaciones en el mismo dominio con diferentes puertos.


Esto parece ser un problema cuando se utiliza el arranque, a menos que esté procesando el formulario mediante {{form (form)}}. Además, los problemas parecen ocurrir solo en input type = "hidden". Si inspecciona la página con el formulario, encontrará que la entrada oculta no forma parte del marcado o que se está procesando pero no se ha enviado por algún motivo. Como se sugirió anteriormente, agregando {{form_rest (form)}} o envolviendo la entrada como a continuación debería hacer el truco.

<div class="form-group"> <input type="hidden" name="_csrf_token" value="{{ csrf_token(''authenticate'') }}"> </div>


Esto sucede porque los formularios por defecto contienen protección CSRF, que no es necesaria en algunos casos.

Puede deshabilitar esta protección CSRF en su clase de formulario en el método getDefaultOptions como este:

// Other methods omitted public function getDefaultOptions(array $options) { return array( ''csrf_protection'' => false, // Rest of options omitted ); }

Si no desea deshabilitar la protección CSRF, entonces debe representar el campo de protección CSRF en su forma. Se puede hacer usando {{ form_rest(form) }} en su archivo de vista, así:

<form novalidate action="{{path(''signup_index'')}}" method="post" {{form_enctype(form)}} role="form" class="form-horizontal"> <!-- Code omitted --> <div class="form-group"> <div class="col-md-1 control-label"> <input type="submit" value="submit"> </div> </div> {{ form_rest(form) }} </form>

{{ form_rest(form) }} representa todos los campos que no ha ingresado manualmente.


Necesita agregar la _token en su forma, es decir,

{{ form_row(form._token) }}

Por el momento, su formulario no tiene el campo de token CSRF. Si usa las funciones de formulario twig para representar su formulario como form(form) esto representará automáticamente el campo de token CSRF, pero su código muestra que está procesando su formulario con HTML sin formato como <form></form> , por lo que tiene que renderizar manualmente el campo.

O simplemente, agregue {{ form_rest(form) }} antes de la etiqueta de cierre del formulario.

De acuerdo con los documentos

Esto representa todos los campos que aún no se han procesado para el formulario dado. Es una buena idea tener siempre esto en algún lugar dentro de su formulario, ya que representará campos ocultos para usted y hará que los campos que olvidó representar sean más obvios (ya que representará el campo para usted).

form_rest (ver, variables)


Si ha convertido su formulario de HTML simple a twig, asegúrese de no perder la eliminación de una etiqueta de cierre </form> . Error tonto, pero como descubrí que es una posible causa de este problema.

Cuando recibí este error, no pude resolverlo al principio. Estoy usando form_start() y form_end() para generar el formulario, por lo que no debería tener que agregar explícitamente el token con form_row(form._token) , o usar form_rest() para obtenerlo. Ya debería haber sido agregado automáticamente por form_end() .

El problema era que la vista con la que estaba trabajando era una que había convertido de HTML sin formato a twig, y me había olvidado de eliminar la etiqueta de cierre </form> , así que en lugar de:

{{ form_end(form) }}

Tuve:

</form> {{ form_end(form) }}

Eso en realidad parece algo que podría arrojar un error, pero aparentemente no es así, así que cuando form_end() genera form_rest() , el formulario ya está cerrado. El origen de la página generada real del formulario era así:

<form> <!-- all my form fields... --> </form> <input type="hidden" id="item__token" name="item[_token]" value="SQAOs1xIAL8REI0evGMjOsatLbo6uDzqBjVFfyD0PE4" /> </form>

Obviamente, la solución es eliminar la etiqueta de cierre adicional y tal vez beber un poco más de café.


También puede ver este mensaje de error, si su formulario tiene muchos elementos.

Esta opción en php.ini causa del problema

; How many GET/POST/COOKIE input variables may be accepted max_input_vars = 1000

El problema es que _token pierde la solicitud PUT (GET). Entonces, puede aumentar el valor.

Además, se trata de archivos grandes. Aumentando el

upload_max_filesize

la opción resolverá el problema


Tuve el mismo error, pero en mi caso el problema era que mi aplicación estaba usando múltiples dominios de primer nivel, mientras que la cookie estaba usando uno. La eliminación de cookie_domain: ".%domain%" de framework.session en config.yml provocó que las cookies config.yml de manera predeterminada el dominio en el que estaba el formulario, y que resolvió el problema.


Tuve este error recientemente. Resulta que mi configuración de cookies era incorrecta en config.yml. Al agregar las configuraciones cookie_path y cookie_domain a framework.session arregló.


Tuve este problema con un comportamiento extraño: borrar el caché del navegador no lo solucionó, pero borrar las cookies (es decir, la cookie de identificación de sesión PHP) resolvió el problema.

Esto tiene que hacerse después de que haya verificado todas las otras respuestas, incluida la verificación de que tiene el token en un campo de entrada de formulario oculto.