gestion des tokens Admin



  • Bonjour à toutes et tous

    Je suis en train de développer un BO personnalisé.
    Mon menu se trouve dans admin/themes/montheme/template/nav.tpl
    et tous les liens du menu envoient vers des controllers admin de modules
    Chacun des tpl de ces modules ont également des liens vers d'autres modules ou vers eux même.

    Je ne comprend pas comment gérer les tokens pour ne pas avoir sans arret la page d'alerte "clé de sécurité invalide" et je ne trouve pas vraiment de doc là dessus.
    J'ai lu que le token peut être calculé par
    Tools::getAdminToken(‘AdminCustomersCommentsController’.(int)(Tab::getIdFromClassName(‘AdminCustomersCommentsController’)).(int)$this->context->employee->id);
    Mais si j'affiche ça j'ai un undefined constant ‘AdminCustomersCommentsController’
    Donc le token généré est faux.

    Seconde question, quelle est la meilleure pratique pour les générer et utiliser proprement ?
    Je les calcule et les assigne à context->smarty dans un override du constructeur de AdminController ?

    Merci


  • administrators

    Dans le BO, Presta les passe en js^^



  • Que veux tu dire ?
    Sur les liens du menu du BO de base, les tokens sont biens passés dans l'url, en get.
    Je ne comprend pas comment ils sont générés.


  • administrators

    En fait, je ne comprends pas ta question :confused:
    dans nav.tpl de ton thème les tokens arrivent depuis l'AdminController:

    $tabs[$index]['href'] = $this->context->link->getAdminLink($tab['class_name']);
    
    

    Et ton thème les récupère:

    {foreach $tabs as $t}
    

    Donc pourquoi veux-tu les modifier ?



  • merci j'ai bien avancé.
    Le nav.tpl n'existe plus, je suis sur un BO construit depuis 0.
    Et la question ne portait pas que sur le menu, il y a aussi de nombreux liens entre les controllers dans leurs contenus.
    Je cherchais en fait à avoir la génération des tokens uniquement, pas de l'url complète, notamment parce que j'ai des appels en ajax qui initialement passaient le param "token"
    Mais j'ai modifié pour utiliser des liens complets générés par getadminLink
    :thumbsup_tone2:

    Concernant la bonne pratique :
    Dans le renderView de chacun des controllers je calcule et j'assigne tous les liens vers les autres controllers qui vont être utilisé dans view.tpl
    du genre :
    $this->context->smarty->assign('specimens_link',$this->context->link->getAdminLink('AdminCustomersSpecimens'));

    Il y a une meilleure solution ?
    ça me fait une 10aine d'assignations par controller, et c'est redondant.


  • administrators

    @chdup a dit dans gestion des tokens Admin :

    $this->context->smarty->assign('specimens_link',$this->context->link->getAdminLink('AdminCustomersSpecimens'));

    Chais pas... un truc comme

    foreach($controller as $class_name)
        $this->context->smarty->assign($class_name.'_link',$this->context->link->getAdminLink('AdminCustomers'.$class_name));
    


  • ma question etait surtout de savoir où le faire.
    Dans chacun de mes controllers ?
    Ou devrais-je le faire de façon plus globale dans un override de AdminController et ainsi y avoir accès dans les controllers qui l'étendent ?


Se connecter pour répondre
 

Il semble que votre connexion ait été perdue, veuillez patienter pendant que nous vous re-connectons.