====== 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 ;-)