2015-08-05 3 views
2

Я использую magento версии 1.9.0.1.Изменена ли функция хеш-пароля в пурпуре? Если да, то к чему?

Для переключения в пурпурные цели мне нужно создать функцию входа для клиентов вне рамки magento.

Я искал метод magento, который использует хэш и проверяет пароли, но этот метод больше не работает.

Ниже кода, который я использую для проверки входа пользователя за пределы magento. Этот код - просто попробовать доказательство концепции и не используется в живой среде по очевидным причинам :).

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 является ENTITY_ID прошло после проверки электронной почты,

$passwordInput является введенный пароль в форме авторизации.

Это возвращает отказ. Который меня не удивляет, потому что, когда я возвращаю $hashInput и сравниваю его с $hashed_password, это не то же самое.

Был ли изменен пароль хешей Magento? Или есть ошибка в моем коде?

+0

Вы решили эту проблему? Если да, можете ли вы отправить решение? – smartin

+0

Да, прошло некоторое время, но приведенный выше код действительно работает (только для клиентов). Я сделал глупую ошибку, и были ошибочные данные ($ passwordInput был неправильным). Поэтому он явно вернулся к ошибке. Однако не используйте этот код в живой среде. – ElFietsbel

ответ

5

Если вы отметите в \app\code\core\Mage\Customer\Model\Customer.php вы можете найти что-то вроде этого (около линии 430):

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

helper('core') является \app\code\core\Mage\Core\Helper\Data.php

В \app\code\core\Mage\Core\Helper\Data.php, вы найдете:

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

и getEncryptor() функция:

/** 
* @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 в \app\code\core\Mage\Core\Model\Encryption.php и в этом файле вы можете найти:

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

и

/** 
* 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'); в /app/etc/local.xml файле.

Ваша переменная $hashed_password проходит мимо этого последнего метода.

Ваша переменная $hashInput также проходит там?


Таким образом, вы можете изменить в checkPassword() функции:

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

в

$hashInput = encryptPassword($passwordInput); 

Таким образом, $hashInput и $hashed_password будет следовать тем же путем.

+0

Моя функция должна работать вне рамки magento. Поэтому он должен функционировать без использования каких-либо классов/функций magento. – ElFietsbel

+1

И если вы попробуете это: '$ hashInput = md5 ($ salt. $ PasswordInput);' // см.: Mage_Core_Model_Encryption в строке 74 – Nolwennig

+1

Лучше поздно, чем никогда, спасибо за вашу помощь. Конечным результатом была глупая ошибка на моей стороне, были отправлены неправильные данные, и поэтому она вернулась в Failure. Спасибо, что предоставили мне больше информации о пурпуровом коде! – ElFietsbel

 Смежные вопросы

  • Нет связанных вопросов^_^