1. Ce site utilise des "témoins de connexion" (cookies) conformes aux textes de l'Union Européenne. Continuer à naviguer sur nos pages vaut acceptation de notre règlement en la matière. En savoir plus.

[Tutoriel] Changer le hash - Compatibilité AuthMe (ou autre)

Discussion dans 'Espace développeur' démarrée par Spiikesan, 9 Mars 2017.

  1. Spiikesan
    Offline

    Spiikesan Développeur

    Inscrit depuis le :
    6 Mars 2017
    Messages :
    18
    "J'aime" reçus :
    4
    Points de Trophée :
    3
    Sexe :
    Masculin
    Travail/Loisirs :
    Informatique, développement
    Lieu de résidence :
    Bordeaux
    Bonjour,

    Étant donné la nature même d'un CMS, il peut être intéressant que celui-ci permette de créer des comptes en jeu directement, ainsi, seuls les utilisateurs inscrits sur le site pourront se connecter en jeu.
    Je n'aborderai pas ici la configuration d'AuthMe (à moins qu'on me le demande par la suite) mais uniquement comment changer la méthode de hashage des mots de passe du CMS afin de le rendre compatible avec celui-ci (ou d'autres).

    Alors on commence (ici, un exemple pour AuthMe Reloaded en sha256 avec un salt de 8 octets) :

    Tout d'abord, il faut aller dans extazcms/lib/Cake/Controller/Component/Auth et créer un fichier AuthMePasswordHasher.php


    Vous allez créer une classe qui extends d'AbstractPasswordHasher (cela est nécessaire pour que ça fonctionne)
    Cette classe permet de gérer le hashage (hash()) et la vérification (check()) des mots de passe.
    PHP:
    <?php
    /**
     * Spiikesan for AuthMe Reloaded sha256 - salt 8
     */

    App::uses('AbstractPasswordHasher''Controller/Component/Auth');

    class 
    AuthMePasswordHasher extends AbstractPasswordHasher {

        protected 
    $_config = array('saltSize' => 8,
                                   
    'hashType' => 'sha256');

        protected 
    $salt '';

        public function 
    generateSalt() {
           
            
    $chars = array('0''1''2''3''4''5''6''7''8''9''a''b''c''d''e''f');
            
    $maxcharsindex 15;
           
            
    $this->salt '';

            
    $s_2 $this->_config['saltSize'] * 2;
           
            for (
    $i 0$i $s_2$i += 1) {
                
    $this->salt .= $chars[mt_rand(0$maxcharsindex)];
            }
        }

        public function 
    getSaltFromHash($hashedPassword) {
            
    $content explode('$'$hashedPassword);
            
    //hash is like $SHA$salt$hash
            //            0$ 1 $ 2  $ 3
            
    if (count($content) >= 2) {
                
    $this->salt $content[2];
                return 
    true;
            }
            return 
    false;
        }

        public function 
    hash($password) {
            if (empty(
    $this->salt))
                
    $this->generateSalt();
            return 
    '$SHA$' $this->salt '$' hash($this->_config['hashType'], hash($this->_config['hashType'], $password) . $this->salt);
        }

        public function 
    check($password$hashedPassword) {
            if (
    $this->getSaltFromHash($hashedPassword))
                return 
    $hashedPassword === $this->hash($password);
            return 
    false;
        }
    }

    Ensuite, modifier dans extazcms/app/Model/User.php
    PHP:
    /* Modifier ceci */
    App::uses('SimplePasswordHasher''Controller/Component/Auth');

    /* Par cela (le nom du fichier créé précédemment, sans l'extension) */
    App::uses('AuthMePasswordHasher''Controller/Component/Auth');

    /* Et en bas, dans la fonction beforeSave, remplacer */
    $passwordHasher = new SimplePasswordHasher();

    /* Par le nom de la classe créée */
    $passwordHasher = new AuthMePasswordHasher();

    Ensuite, il suffit de modifier le fichier dans extazcms/Cake/Controller/Component/Auth/BaseAuthenticate.php comme suit :
    PHP:
    /* trouvez ceci au début de la classe */
    public $settings = array(
            
    'fields' => array(
                
    'username' => 'username',
                
    'password' => 'password'
            
    ),
            
    'userModel' => 'User',
            
    'scope' => array(),
            
    'recursive' => 0,
            
    'contain' => null,
            
    /* ~ ligne 49 */
            
    'passwordHasher' => 'AuthMe' /* Mettre AuthMe à la place de Simple. Attention à la casse */
        
    );
    En espérant que ça puisse aider certains.

    Cordialement,
    Spiikesan
     

Partager cette page

Utilisateurs qui regardent actuellement cette discussion : 0 membre(s) et 0 visiteur(s)