fhcnoreply Posted June 19, 2017 Share Posted June 19, 2017 (edited) Bonjour, Je développe actuellement un module de page pour le backoffice de la version 1.6.1.11. Mon problème en une image : En cherchant sur internet, je tombe sur des articles de 2014 indiquant une modification à réaliser dans le noyau de Prestashop. J'imagine que cette erreur a pu être corrigée dans une version ultérieure. Le problème ne serait pas gênant si ce n'était pas le site d'une cliente ... Que faut-il indiquer dans le module pour récupérer / générer une clé ? Merci d'avance. Freshcore Edited June 19, 2017 by fhcnoreply (see edit history) Link to comment Share on other sites More sharing options...
GuillaumeCW Posted June 19, 2017 Share Posted June 19, 2017 Tools::getAdminTokenLite('AdminModules') Link to comment Share on other sites More sharing options...
fhcnoreply Posted June 20, 2017 Author Share Posted June 20, 2017 (edited) Bonjour, Effectivement, j'aurai dû agrémenter d'un peu plus d'explication. L'erreur survient lorsqu'on affiche un contrôleur en cliquant sur un élément du menu. Voici l'installation du menu : public function install () { $this->installTab('AdminPharmaSync', 'PharmaSync'); if(!parent::install()) return false; return true; } public function installTab ($controller, $tabname, $controller_parent = false) { $tab = new Tab(); $tab->active = 1; $tab->class_name = $controller; /* Lang */ $tab->name = array(); foreach(Language::getLanguages() as $language) $tab->name[$language['id_lang']] = $tabname; /* Parent */ if($controller_parent) { $tab->id_parent = (int)Tab::getIdFromClassName($controller_parent); } else { $tab->id_parent = 0; } /* Module */ $tab->module = $this->name; $tab->add(); } Voici le contrôleur Admin : <?php if (!defined('_PS_VERSION_')) exit; class AdminPharmasyncController extends AdminController { public function __construct() { parent::__construct(); } public function renderList () { /* ... traitement des données ... */ /* Display */ $smarty = $this->context->smarty; $smarty->assign($front_vars); $this->context->controller->addCSS(_PS_MODULE_DIR_.'/pharmasync/css/pharmasync.css'); $this->context->controller->addJS(_PS_MODULE_DIR_.'/pharmasync/js/pharmasync.js'); return $smarty->fetch(_PS_MODULE_DIR_ . '/pharmasync/views/templates/admin/products.tpl'); } } La clé est bien saisie dans le lien du menu mais visiblement Prestashop ne l'aime pas. En réalité, je ne sais pas trop où le problème se situe ... est-ce qu'il y a une clé / référence à indiquer à Prestashop ? Est-ce que la méthode 'Tools::getAdminTokenLite('AdminModules')' peut-être utilisée quelque part pour débloquer la situation ? Merci à tous les deux. Freshcore Edited June 20, 2017 by fhcnoreply (see edit history) Link to comment Share on other sites More sharing options...
fhcnoreply Posted June 20, 2017 Author Share Posted June 20, 2017 Merci Okom3pom, j'ai changé l'héritage de la classe. Par contre, ça ne marche pas mieux pour la clé. C'est curieux, pourquoi serait-elle invalide ? C'est automatiquement généré par Prestashop. <domain>/admin<salt>/index.php?controller=AdminPharmaSync&token=9ab4361f0b64f0e19506c0f74fc630d0 Link to comment Share on other sites More sharing options...
GuillaumeCW Posted June 20, 2017 Share Posted June 20, 2017 Le token est réglé ainsi dans AdminController (dont hérite ModuleAdminController) : $this->token = Tools::getAdminToken($this->controller_name.(int)$this->id.(int)$this->context->employee->id); Donc il faudrait vérifier la propriété controller_name. Fouillez du côté de AdminController::checkToken pour suivre la logique qui fait apparaître cet écran de clef invalide. 1 Link to comment Share on other sites More sharing options...
fhcnoreply Posted June 20, 2017 Author Share Posted June 20, 2017 J'avais désinstallé et réinstallé le module, ce n'était pas ça. GuillaumeCW tu viens de résoudre mon problème : la classe s'appelle AdminPharmasync mais le fichier s'appelle AdminPharmaSync. A la génération de la clé, il prenait avec le 's' minuscule et lors du test avec le 'S' majuscule. Du point de vue de Prestashop, il aurait été plus convenu que la chaîne ne soit pas sensible à la casse ou qu'il respecte la valeur de génération. Bon après de mon côté, c'est une erreur bête qu'aurait pu être détecté plus rapidement. Merci à tous les deux. sujet résolu. Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now