web-dev-qa-db-fra.com

Désactiver la protection des jetons csrf symfony 2 sur ajax submit

je construis une application mobile parlant à mon application symfony2 via des webservices je ne trouve pas un moyen de désactiver la protection csrf sur un contrôleur/action spécifique

je souhaite publier des données d'enregistrement pour cette action et utiliser la validation de formulaire sf2. Je n'appelle pas le formulaire dans mon application mobile

Impossible de modifier les paramètres du conteneur en action, lève une exception car il s'agit d'un paramètre figé ...

Je ne souhaite pas désactiver la protection des formulaires pour l'ensemble de mon application

un indice?

merci !

mise à jour: avec symfony 2.1.x

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

Si vous cherchez une solution un peu plus simple et plus rapide que celle suggérée dans la réponse ci-dessus, voici comment:

<?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,
        ));
    }
}

.. ou si vous utilisez des versions plus anciennes (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;
    }
}

Consultez la documentation Symfony pour plus d'informations.


Edit: réponse mise à jour vers la dernière version de Symfony, merci naitsirch

86
Inoryy

Utilisation de la fabrique de formulaires

Pour ceux qui souhaitent créer un formulaire simple dans un contrôleur:

$form = $this->container->get('form.factory')
    ->createNamedBuilder(null, 'form', null, array('csrf_protection' => false))
    ->add('yourField','text', array(
        'label' => false,
        'mapped' => false
    ))
    ->getForm();
20
Mick
public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults([
        'csrf_protection' => false,
    ]);
}
7
luchaninov

Utilisation de la fabrique de formulaires dans 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();

Adapté de la réponse de Mick

2
Nicodemuz