Bonjour à tous,
je sais que ce problème est récurrent et j'y ai vu des solutions mais je n'arrive pas à les faire fonctionner.
Donc comme vous avez pu le comprendre, lorsque je soumets côté client, une requête post en ajax vers le côté serveur à l'intention d'un formulaire, je me vois gratifié du message CSRF Token invalid....
Déjà j'ai vu la solution consistant à ajouter {{form_rest etc etc dans la view du formulaire, mais je n'ai pas de vue, je n'affiche pas mon formulaire. Il me sert simplement à instancier un nouvel objet d'une entité donné afin de l'enregistrer dans ma base de données.
Un autre élément intéressant de mon contexte de travail est le suivant : si j'ai bien compris, le CSRF Token a une durée de vie, il est délivré par le serveur. Le truc c'est que le but de mon application est que côté client elle soit entièrement chargé et le client peut travailler dessus sans nécessairement avoir de connexion avec le serveur (donc le matin il charge ce dont il a besoin), il travaille dessus toute la journée et régulièrement des tentatives d'envoi de données sont effectuées. Le problème donc est que le Token est probablement périmé au bout d'un certain moment.
J'ai donc également essayé de re générer un nouveau token côté serveur lors de la réception de la requête client, et de le passer en paramètre de mon formulaire afin de le mettre moi même dans un champ csrf mais ça ne fonctionne pas non plus :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 class CallType extends AbstractType { private $csrfToken; public function __construct($token) { $this->csrfToken = $token; } public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('csrfToken', 'csrf', array( 'data' => $this->csrfToken )) ->add('startDate', 'datetime', array( 'widget' => 'single_text', .......
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 /** * @Route("/project/survey") */ class SurveyController extends Controller { /** * @Route("/save-answers", name="survey_saveanswers") * @Method({"POST"}) * @Security("has_role('ROLE_CALLER')") */ public function saveAnswersAction(Request $request) { $csrfToken = $this->container->get('form.csrf_provider')->generateCsrfToken('authenticate'); $call = new Call(); $form = $this->createForm(new CallType($csrfToken), $call);
Des idées ?? merci d'avance
Partager