15000 人のユーザーを Virtuemart から Magento にインポートしていますが、正しくインポートするためのパスワードを取得できませんでした。
私の問題は、パスワードのハッシュが異なることです。
Virtuemart HASH = md5($password.$salt);
マジェント ハッシュ = 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];
}
}
}
if ステートメントを含めるように validatehash 関数を変更しましたが、これは認識されないようです。私のphpスキルは非常に基本的なものですので、誰かがこれのどこが間違っているのか、またはもっと良い方法があるのか を説明してください.
ありがとう。