2

Magento バージョン 1.9.0.1 を使用しています。

Magento に切り替えるには、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 がパスワードをハッシュする方法は変更されましたか? または、私のコードに間違いがありますか?

4

1 に答える 1

6

チェックインすると、\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

于 2015-08-05T11:47:39.747 に答える