2015-08-05 2 views
2

J'utilise magento version 1.9.0.1.La fonction de mot de passe de hachage a-t-elle changé dans magento? Si oui, à quoi?

Pour passer à des fins magento Je dois créer une fonction de connexion pour les clients en dehors du cadre de magento.

J'ai regardé la méthode de hachage utilise magento et valider les mots de passe, mais la méthode ne semble pas fonctionner plus.

Ci-dessous le code que j'utilise pour valider une connexion utilisateur en dehors magento. Ce code est juste pour essayer la preuve de concept et n'est pas utilisé dans un environnement en direct pour des raisons évidentes :).

function checkPassword($entity,$passwordInput){ 
    $query = mysql_query("SELECT value FROM customer_entity_varchar WHERE entity_id = '$entity' AND attribute_id = '12' LIMIT 1"); 
    $fetch = mysql_fetch_object($query); 
    $fetch_data = explode(':',$fetch->value); 
    $hashed_password = $fetch_data['0']; 
    $salt = $fetch_data['1']; 

    $hashInput = md5($passwordInput . $salt); 
    if($hashInput == $hashed_password){ 
     return 'Success'; 
    } 
    else{ 
     return 'Failure'; 
    } 
} 

$entity est le entity_id passé après validation de courrier électronique,

$passwordInput est le mot de passe entré dans le formulaire de connexion.

Renvoie l'échec. Ce qui ne me surprend pas parce que quand je reviens $hashInput et que je compare avec $hashed_password ce n'est pas la même chose.

la manière a-t-Magento été hashs des mots de passe changé? Ou y a-t-il une erreur dans mon code?

+0

Avez-vous résolu ce problème? Si oui, pouvez-vous envoyer une solution? – smartin

+0

Oui, il y a longtemps, mais le code ci-dessus fonctionne réellement (uniquement pour les clients). J'ai fait une erreur stupide et de fausses données étaient en train d'être postées ($ passwordInput n'était pas correct) Donc, évidemment, il a retourné Failure. N'utilisez pas ce code dans un environnement en direct. – ElFietsbel

Répondre

5

Si vous archivez \app\code\core\Mage\Customer\Model\Customer.php vous pouvez trouver quelque chose comme ça (près de la ligne 430):

/** 
* Encrypt password 
* 
* @param string $password 
* @return string 
*/ 
public function encryptPassword($password) 
{ 
    return Mage::helper('core')->encrypt($password); 
} 

Le helper('core') est \app\code\core\Mage\Core\Helper\Data.php

En \app\code\core\Mage\Core\Helper\Data.php, vous trouverez:

/** 
* Encrypt data using application key 
* 
* @param string $data 
* @return string 
*/ 
public function encrypt($data) 
{ 
    if (!Mage::isInstalled()) { 
     return $data; 
    } 
    return $this->getEncryptor()->encrypt($data); 
} 

et getEncryptor() La fonction est:

/** 
* @return Mage_Core_Model_Encryption 
*/ 
public function getEncryptor() 
{ 
    if ($this->_encryptor === null) { 
     $encryptionModel = (string)Mage::getConfig()->getNode(self::XML_PATH_ENCRYPTION_MODEL); 
     if ($encryptionModel) { 
      $this->_encryptor = new $encryptionModel; 
     } else { 
      $this->_encryptor = Mage::getModel('core/encryption'); 
     } 

     $this->_encryptor->setHelper($this); 
    } 
    return $this->_encryptor; 
} 

$this->_encryptor est en \app\code\core\Mage\Core\Model\Encryption.php et dans ce fichier, vous pouvez trouver:

/** 
* Encrypt a string 
* 
* @param string $data 
* @return string 
*/ 
public function encrypt($data) 
{ 
    return base64_encode($this->_getCrypt()->encrypt((string)$data)); 
} 

et

/** 
* Instantiate crypt model 
* 
* @param string $key 
* @return Varien_Crypt_Mcrypt 
*/ 
protected function _getCrypt($key = null) 
{ 
    if (!$this->_crypt) { 
     if (null === $key) { 
      $key = (string)Mage::getConfig()->getNode('global/crypt/key'); 
     } 
     $this->_crypt = Varien_Crypt::factory()->init($key); 
    } 
    return $this->_crypt; 
} 

(string)Mage::getConfig()->getNode('global/crypt/key'); est dans le fichier /app/etc/local.xml.

votre variable passe $hashed_password par cette dernière méthode.

Votre $hashInput variables passe là aussi?


Ainsi, vous pouvez changer dans votre fonction checkPassword():

$hashInput = md5($passwordInput . $salt); 

à

$hashInput = encryptPassword($passwordInput); 

Ainsi, $hashInput et $hashed_password suivra la même façon.

+0

Ma fonction doit fonctionner en dehors du framework magento. Donc, il doit fonctionner sans l'utilisation de toutes les classes/fonctions magento. – ElFietsbel

+1

Et si vous essayez ceci: '$ hashInput = md5 ($ salt. $ PasswordInput);' // voir: Mage_Core_Model_Encryption à la ligne 74 – Nolwennig

+1

Mieux vaut tard que jamais, merci pour votre aide. Le résultat final était une erreur stupide de mon côté, des données erronées étaient affichées et par conséquent, elle renvoyait Failure. Merci de me donner plus d'informations sur le code de magento! – ElFietsbel