【发布时间】:2013-01-10 21:44:47
【问题描述】:
我正在将 15000 个用户从 mercurymart 导入到 magento,但无法获取正确导入的密码。
我的问题是密码的哈希值不同。
Virtuemart HASH = md5($password.$salt);
Magento HASH = md5($salt.$password);
示例密码如下所示:
c957d358c8a79e66af10086b53b5a069:AuHg2mCXUhViqKYCLtFco22rmUCDwIFI
下面提供了一个答案,部分解决了我的问题。应用此设置允许我的美德玛客户登录,但会导致管理员登录出现问题并强制新用户使用美德玛密码哈希格式。
我现在需要对其进行修改,使其检查核心散列方法,如果失败,则检查允许两种密码格式登录的美德玛特散列方法。
我在想一些类似的事情
public function getHash($password, $salt = false)
{
if (is_integer($salt)) {
$salt = $this->_helper->getRandomString($salt);
}
return $salt === false ? $this->hash($password) : $this->hash($password . $salt) . ':' . $salt : $this->hash($salt . $password) . ':' . $salt;
}
.
public function validateHash($password, $hash)
{
$hashArr = explode(':', $hash);
switch (count($hashArr)) {
case 1:
// no hash
return $this->hash($password) === $hash;
case 2:
// magento default hash
return $this->hash($hashArr[1] . $password) === $hashArr[0];
case 3:
// virtuemart hash
return $this->hash($password . $hashArr[1]) === $hashArr[0]; }
Mage::throwException('Invalid hash.');
}
但是您可能会说这不起作用,因为我无法检查哈希类型方法。
请问我该怎么办?
更新 - 这是我最近的尝试。
public function validateHash($password, $hash)
{
$hashArr = explode(':', $hash);
if(admin_login_handling_and_api_user_accounts){
switch (count($hashArr)) {
case 1:
return $this->hash($password) === $hash;
case 2:
return $this->hash($hashArr[1] . $password) === $hashArr[0];
}
} else if(Magento_customer_handling){
switch (count($hashArr)) {
case 1:
return $this->hash($password) === $hash;
case 2:
return $this->hash($password . $hashArr[1]) === $hashArr[0];
}
} else if(soap_Api_customer_handling){
switch (count($hashArr)) {
case 1:
return $this->hash($password) === $hash;
case 2:
return $this->hash($hashArr[1] . $password) === $hashArr[0];
}
}
}
我已将 validatehash 函数更改为包含 if 语句,但这似乎无法识别。我的 php 技能处于非常基础的方面,所以如果有人能解释一下我哪里出了问题,或者是否有更好的方法来解决它。
谢谢。
【问题讨论】:
标签: magento csv import passwords