- 1
[Opened] Erreur de Token de formulaire à l'authentification
Posted by Dubphil on 02/10/2009 09:14
Bonjour,
Je n'arrive pas à résoudre ce problème, qui semble ne se produire qu'avec Firefox et Internet explorer, j'ai testé avec opéra et seamonkey et je n'ai pas cette erreur.
Cette erreur survient uniquement lorsqu'on charge le site dans son navigateur et que l'on s'authentifie dans la foulée. Si on rafraichit la page on peut s'authentifier et l'erreur n'apparait pas.
Voici l'erreur :
2009-02-10 08:55:14 835 Le token du formulaire n'est pas valide, vous devez remplir le formulaire correctement à partir du site. /var/data/jelix/lib/jelix/forms/jFormsBase.class.php 142
voici comment j'ai overloadé jcommunity pour l'authentification :
dans modules/jinho/zones/ j'ai le fichier login.zone.php
<?php class loginZone extends jZone { protected $_tplname='jcommunity~login'; protected function _prepareTpl(){ if ($this->getParam('error_flag')) { $this->_tpl->assign('error_flag',$this->getParam('error_flag')); } else { $this->_tpl->assign('error_flag',0); } $conf = $GLOBALS['gJCoord']->getPlugin('auth')->config; $form = jForms::get("jcommunity~login",'ident'); if (!$form) $form = jForms::create("jcommunity~login",'ident'); $this->_tpl->assign('form',$form); if ($_SERVER['REQUEST_METHOD'] == 'GET' && $conf['enable_after_login_override']) { $req = $GLOBALS['gJCoord']->request; //(empty($_SERVER['HTTPS'])?'http':'https').'://'.$_SERVER["HTTP_HOST"]. $url = $req->urlScript.$req->urlPathInfo; if(!empty($_SERVER['QUERY_STRING'])) $url.='?'.$_SERVER['QUERY_STRING']; $this->_tpl->assign('url_return',$url); }else $this->_tpl->assign('url_return',''); } } ?>
dans var/themes/default/jcommunity/ j'ai le fichier login.tpl
{meta_html js '/jelix/jquery/jquery.js'} {meta_html js $j_basepath.'themes/jshop_backend/js/jquery.li-scroller.1.0.js'} <script language=javascript> <!-- {literal} $(document).ready( function () { $("ul#ticker01").liScroll({travelocity: 0.03}); $("input[name=auth_login]").val("email"); $("input[name=auth_password]").val("password"); $("input[name=auth_login]").focus( function () { $(this).attr("value",""); }); $("input[name=auth_password]").focus( function () { $(this).attr("value",""); }); var error_flag = {/literal}{$error_flag}{literal}; if ($("ul[class=jforms-error-list]").length >= 1) { $("ul[class=jforms-error-list]").hide(); if (error_flag == 1) { alert($("ul[class=jforms-error-list] > li").html()); } if (error_flag == 2) { if ($("ul[class=jforms-error-list] > li:not(:first)").length >= 1) { alert($("ul[class=jforms-error-list] > li:not(:first)").html()); } else { alert($("ul[class=jforms-error-list] > li").html()); } } } }); {/literal} --> </script> <span class="login"> {form $form, 'jcommunity~jshop_login:in'} {if $url_return} <input type="hidden" name="auth_url_return" value="{$url_return|eschtml}" /> {/if} {ctrl_control 'auth_login'} {ctrl_control 'auth_password'} {formsubmit} {/form} </span> <span class="password"> <a href="{jurl 'jcommunity~jshop_password:index'}"><img src="/images/aide.jpg" alt="{@jinho~jinho.password.forget@}"></a></span>
et enfin dans modules/jcommunity/controllers/ j'ai le fichier jshop_login.classic.php
<?php include(dirname(__FILE__).'/../controllers/login.classic.php'); class jshop_loginCtrl extends loginCtrl { function in() { $rep = $this->getResponse('redirectUrl'); $conf = $GLOBALS['gJCoord']->getPlugin('auth')->config; $url_return = '/'; if ($conf['after_login'] == '') throw new jException ('jauth~autherror.no.auth_login'); if ($conf['after_logout'] == '') throw new jException ('jauth~autherror.no.auth_logout'); $form = jForms::fill('jcommunity~login','ident'); if(!$form) { $rep->url = jUrl::get($conf['after_logout']); return $rep; } if (!jAuth::login($form->getData('auth_login'), $form->getData('auth_password'), $form->getData('auth_remember_me'))){ sleep (intval($conf['on_error_sleep'])); $rep = $this->getResponse('redirect'); $form->setErrorOn('auth_login',jLocale::get('jcommunity~login.error')); $rep->action = ('jshop~default:index'); $rep->params=array('error_flag'=>1); return $rep; } else { jForms::destroy('jcommunity~login','ident'); } $history = $GLOBALS['gJCoord']->getPlugin('history'); if (!isset($_SESSION['HISTORY'])) { $rep = $this->getResponse('redirect'); $rep->action = ('jshop~default:index'); return $rep; } else { return $history->reload( $this->getResponse('redirect') ); } } }
vous avez une idée d'où ça peut venir ?
[Opened] Re: Erreur de Token de formulaire à l'authentification
Posted by Dubphil on 02/12/2009 18:23
N'ayant pas de réponse, je m'interroge ;
1 - La raison est tellement flagrante que ça ne vaut même pas la peine de te l'indiquer tu es d'une nullité crasse
2 - De toute façon tu t'y prends mal pour surcharger jcommunity
3 - C'est trop complexe et on pas le temps débrouille toi ?
si c'est la raison 1 bon ben je comprend et là je n'ai a en vouloir qu'à moi-même d'être aussi nul :)
si c'est la raison 2 une petite indication sur la façon de surcharger jcommunity serait sympa quand même
si c'est la raison 3 j'ai de quoi me faire du souci pour mes applis développées avec Jelix...
[Opened] Re: Erreur de Token de formulaire à l'authentification
Posted by webseb on 02/12/2009 18:36
Salut,
Ou réponse 4, quelqu'un n'as pas eu le temps de ce penché sur ton problème ;-)
Me concernant je débute en prog donc ... mais ton erreur 'token' ça serais pas parce qu'il faut que dans ton form tu es :
<?xml version="1.0" encoding="utf-8"?> <form xmlns="http://jelix.org/ns/forms/1.1"allowAnyOrigin="true" >regarde la doc sur jform, sinon je sais pas ;-)
[Opened] Re: Erreur de Token de formulaire à l'authentification
Posted by catsoup on 02/12/2009 20:01
salut, rapidement car je suis pas expert non plus, mais j'ai deja vu cette erreur, sur laquelle d'ailleurs je dois me pencher.
J'ai cette erreur lorsque je fais un un jForms::fill a partir d'une autre action que celle qui fait le jForms::create
Essaie en faisant un jForms::get au lieu du jForms::fill
Edit: je suis en train de regarder, c'etait pas exactement ça, mais il me semble que il y avait un probleme avec jForms::fill, enfin j'essaie de reproduire le truc :p
Edit2: Alors voila si ça peut aider, j'explique a quelle occasion j'ai eu cette erreur:
C'est en faisant un jForms::fill dans l'action sensée traiter le formulaire, mais comme j'avais plusieurs pages de résultat, lors du clic sur les pages suivantes, le jForms::fill affichait cette erreur car forcement la requete n'est pas renvoyée.
Donc, a priori, cela vient du fait que tu ne recupererai pas bien ta requete du navigateur.
Aussi tu devrais pas mettre ton controlleur dans le module jcommunity, sous peine de l'ecraser malencontreusement par la suite :p
Autant faire un copié collé dans ton controlleur, plutot que d'etendre la classe
Enfin pour conclure, j'ai des soupcons sur le plugin HISTORY, je ne l'utilise pas (encore) mais pas sur que ça serve a grand chose au moment du login de l'utilisateur
[Opened] Re: Erreur de Token de formulaire à l'authentification
Posted by Dubphil on 02/12/2009 22:45
catsoup : en fait c'est nécessaire de mémoriser l'action avant l'authentification car au moment ou les utilisateurs ont rempli leur panier, lorsqu'ils cliquent sur commander je dois mémoriser cette action pour qu'ils puissent y retourner après l'authentification et continuer leur achat.
En fait si tu vois ce code :
$history = $GLOBALS['gJCoord']->getPlugin('history'); if (!isset($_SESSION['HISTORY'])) { $rep = $this->getResponse('redirect'); $rep->action = ('jshop~default:index'); return $rep; } else { return $history->reload( $this->getResponse('redirect') ); }
ce n'est qu'au moment où la variable de session HISTORY est vide que se produit l'erreur or justement je n'utilise pas le plugin history à ce moment.
De plus chose inquiétante ça me fait ça que sous Firefox et IE
[Opened] Re: Erreur de Token de formulaire à l'authentification
Posted by foxmask on 02/12/2009 23:32
2 - De toute façon tu t'y prends mal pour surcharger jcommunity
4 - pas le temps
En premier lieu pour faire marcher "ma surcharge" je ferai simplement une surcharge du template et du dao (si besoin) et pas de la zone.
En second lieu dans le template de login je shooterai le javascript.
comme tu dis que ton pb survient avec FF ; p-e le js est pas bon par ici.
Ainsi si en décomposant les étapes de surcharge pas à pas ; en les testant ; tu parviens à te connecter ; rajoutes les morceaux precedement retirer un à un + resteste,
la méthode des petits pas ;) etc...
@GitHub - Forum HaveFnuBB! powered by Jelix - Le Booster Jelix !
- 1