====== Jelix - Token le révélateur ====== //(version de Jelix supportée 1.1.x)// Depuis la v 1.1RC1 de Jelix, l'apparition de la "lutte" contre les [[http://fr.wikipedia.org/wiki/Cross-Site_Request_Forgeries|CSRF]] avec les tokens permettent non seulement de sécuriser vos formulaires ; tout à fait automatiquement et de façon transparente ; mais pas seulement ! Comment cela ? Supposons que nous éditions l'article 1 depuis l'url http://localhost/article/edit/1 le code de la methode "edit" serait le suivant : function edit { // recuperation de l'id passé sur l'url $id = (integer) $this->param('id'); // si le bouton validate n'est pas utilisé, nous inititions le formulaire if ($this->param('validate') == '') { $form = jForms::get('article~artdao',$id); } // le bouton validate a été pressé : else { // récuperation de l'instance du formulaire $form = jForms::fill('article~artdao'); $form->saveToDao('article~artdao',$id); } } Que se passerait-il avec ce code ? - L'acces à la page d'edition passerait impeccable. - La sauvegarde des données ne se passerait pas bien et nous aurions un message d'erreur : [exception 835] Le token du formulaire n'est pas valide, vous devez remplir le formulaire correctement à partir du site. ..lib/jelix/forms/jFormsBase.class.php 142 on aura beau vider le cache de son application rien n'y fera. Alors pourquoi ce message ? Simplement parceque lors de l'initialisation de l'instance $form (avec jForms::get() nous avons passé en paramètre l'id , mais qu'on ne l'a pas utiliser avec $form = jForms::fill('article~artdao'); donc, remplacez le code ci dessus, par ceci $form = jForms::fill('article~artdao',$id); et le message d'erreur sur le token ne se produira plus. Voici une façon détourner de vérifier que son formulaire est correctement géré avec la fonction anti CSRF ;-)