traditional make loginformauthenticator loginform how form auth ajax symfony csrf

make - Deshabilitar Symfony 2 csrf token protection en ajax submit



symfony 4 user login (5)

Estoy construyendo una aplicación móvil hablando con mi aplicación symfony2 a través de servicios web. No puedo encontrar una manera de desactivar la protección csrf en un controlador / acción específica.

Quiero publicar datos de registro para esta acción y usar la validación de formulario sf2. No llamo al formulario en mi aplicación móvil

No se pueden cambiar los parámetros del contenedor en acción, lanzar una excepción porque es un parámetro congelado ...

No quiero deshabilitar la protección de formularios para toda mi aplicación

Cualquier pista ?

Gracias !

actualización: con Symfony 2.1.x

/** * {@inheritdoc} */ public function setDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setDefaults(array( ''csrf_protection'' => false, )); }


Usando la fábrica de formularios

Para aquellos que quieren crear un formulario simple en un controlador:

$form = $this->container->get(''form.factory'') ->createNamedBuilder(null, ''form'', null, array(''csrf_protection'' => false)) ->add(''yourField'',''text'', array( ''label'' => false, ''mapped'' => false )) ->getForm();


Usando la fábrica de formularios en Symfony 3

use Symfony/Component/Form/Extension/Core/Type/FormType; $form = $this->container->get(''form.factory'') ->createNamedBuilder(null, FormType::class, null, array(''csrf_protection'' => false)) ->add(''yourField'',''text'', array( ''label'' => false, ''mapped'' => false )) ->getForm();

Adaptado de la respuesta de Mick


No puedo estar 100% seguro, pero creo que leí en alguna parte que puede pasar la opción csrf_provider al crear el formulario.

Todos los proveedores son subtipos de la interfaz Symfony/Component/Form/Extension/Csrf/CsrfProvider y usted debería poder crear la suya propia:

class MyNonCsrfProvider extends DefaultCsrfProvider{ public function isCsrfTokenValid($intention, $token) { return true; } }

y en el controlador:

$this->createForm(new CustomFormType(), array( ''csrf_provider'' => new MyNonCsrfProvider() ));

No lo he intentado yo mismo, pero esto parece una posible solución ...


Si está buscando una solución un poco más fácil y más rápida que la sugerida en la respuesta anterior, aquí le mostramos cómo:

<?php // ... use Symfony/Component/Form/AbstractType; use Symfony/Component/Form/FormBuilder; use Symfony/Component/OptionsResolver/OptionsResolver; class MyType extends AbstractType { // ... public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults(array( ''csrf_protection'' => false, )); } }

.. o si estás usando Symfony 2.0. *:

<?php // ... use Symfony/Component/Form/AbstractType; use Symfony/Component/Form/FormBuilder; class MyType extends AbstractType { // .... public function getDefaultOptions(array $options) { $options = parent::getDefaultOptions($options); $options[''csrf_protection''] = false; return $options; } }

Consulte la documentación de Symfony para obtener información adicional.

Editar: respuesta actualizada a la última versión de Symfony, gracias naitsirch


public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults([ ''csrf_protection'' => false, ]); }