Jump to content

token clé invalide sur envoi de formulaire


Recommended Posts

Bonjour, voilà je suis dans un module perso de type admin et dans un tpl j'ai un bouton submit. Par exemple ce code fonctionne bien:

 

<form id="sauvegarde" action="{$currentIndex}&add{$table}&myparam=passeok&token={$token}"  method="post" class="form-horizontal">
<button type="submit" class="btn btn-default">
<i class="icon-save"></i> 
{l s='Enregistrer'}
</button>
</form>
 
mais comme je dois passer d'autres paramètres dans l'url calculés par javascript, j'ai essayé ce code
 
<form id="sauvegarde" action="" onSubmit="btnSave()" method="post" class="form-horizontal">
<button type="submit" class="btn btn-default">
<i class="icon-save"></i> 
{l s='Enregistrer'}
</button>
</form>
 
avec en javascript
 
        function btnSave() {
 
... ici je mettre mon code pour calculer un paramètre
 
           var url = "{$currentIndex}&add{$table}&myparam=passeok&token={$token}";
 
           document.getElementById('sauvegarde').action = url;
 
        }; 
 
problème, le message renvoie toujours "clé invalide" à l'exécution du bouton. Il me semble avoir lu quelque part qu'il fallait modifier les token à chaque appel de page, mais pas idée comment.
 
à ce propos est-ce qu'on passer un paramètre au format json dans l'url comme en Ajax ?
 
merci d'avance
 
 
 
 

 

Link to comment
Share on other sites

Hello,

 

Un token est normalement unique par combinaison de id_employee et par AdminTab / AdminController.
Si votre code JS valide le formulaire vers le même AdminTab / AdminController, le token reste inchangé.

 

Peux tu poster plus de ton code pour qu'on puisse t'aider à identifier le soucis ?

Sur quelle version de PrestaShop es tu ?

 

 

Link to comment
Share on other sites

Merci pour le retour, je suis sous Prestashop 1.6

En fait quand je me suis aperçu (pas si sûr...) qu'on pouvait pas passer de format json par un formulaire post, j'ai changé pour un envoi par Ajax sans token et là a priori c'est accepté. Mais j'ai actuellement le même problème pour passer d'un controller standard à un autre perso (AdminOperations)

 

dans la fonction standard renderview() qui affiche une liste d'enregs, chaque enreg dispose d'un lien de type:

 

self::$currentIndex = self::$currentIndex.'&id_attribute_group='.(int)$id.'&viewattribute_group';

 

je voudrai modifier ce lien et le remplacer par:

 

$tokenOperations = Tools::getAdminToken('AdminOperations'.intval(Tab::getIdFromClassName('AdminInteractidOperations')).intval($this->context->employee->id));

 

self::$currentIndex = 'index.php?controller=AdminOperations&id_attribute=25&token='.$tokenOperations;

 

si je fait le test d'exécuter ce lien juste après cette ligne, il part bien sur mon controller et je n'ai pas de message de token invalide

 

mais ce lien est ensuite encore complété a priori par classes/helper/HelperList.php via displayListContent() qui lui rajoute encore un token (donc une url avec 2 tokens => clé invalide...8-( juste avant de lancer le tpl

 

S'il fallait écrire juste un bouton qui passe d'un controller à un autre quel serait en fait la syntaxe la plus simple ?

 

merci d'avance

 
 
 
 

 

 

HelperList.php

Link to comment
Share on other sites

Utilises Tools::getAdminTokenLite('AdminOperations') déjà tu t'embêteras moins avec les concatenations :)

Pour ce qui est de l'histoire des deux tokens, tu peux me donner un exemple de liens ?

 

Pour le bouton, la syntaxe la plus simple c'est Tools::getAdminTokenLite je pense :)

Link to comment
Share on other sites

merci pour l'info, c'est plus simple en effet, on trouve souvent cette version sur le web

 

$this->token = Tools::getAdminToken($className.(int)$this->id.(int)$cookie->id_employee);

 

pour l'url avec les 2 tokens, c'était normal puisque j'en rajoutai un différent pour passer sur mon controller et le HelperList.php rajoutait celui du Controller en cours...

 

je vais éviter de passer par ce helper qui fait trop goulet d'étranglement sur tous les controllers admin

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...