customer
まず第一に -からすでにオブジェクトを持っているのに、なぜオブジェクトをロードするの$observer->getEvent()->getCustomer()
ですか? この操作はここでは過剰であり、リソースと時間がかかるだけです。
2 つ目 - セキュリティ対策のため、Magento はユーザー パスワードを復号化された形式で保存しません。ユーザーパスワードを取得したい場合は、次のコードを試してください:
$passwHash = $customer->getPasswordHash();
$password = Mage::helper('core')->decrypt($passwHash); // this will not work
更新:Mage::helper('core')->decrypt
パスワード ハッシュは md5 ハッシュ関数でハッシュされているため、復号化されません。そのため、パスワードが同一かどうかを確認する方法があります ( Mage::helper('core')->validateHash
) が、元のパスワードを取得することはできません。
更新 2 : 質問者がいくつかの興味深い質問をコメントで提供してくれたので、ここでそれらに対処します。
123456のハッシュが、md5 にあるはずなのになぜでしょうか0f474c41fd20617eb8f1a0cb9b08f3aa:Uh
。e10adc3949ba59abbe56e057f20f883e
答えは -hash
メソッドが着信パスワードをハッシュするだけでなく、ランダムに生成されたソルトもハッシュするためです。この方法を見てください:
public function getHash($password, $salt = false)
{
if (is_integer($salt)) {
$salt = $this->_helper->getRandomString($salt);
}
return $salt === false ? $this->hash($password) : $this->hash($salt . $password) . ':' . $salt;
}
Customer
モデル内のこれらの 2 つのメソッド:
public function setPassword($password)
{
$this->setData('password', $password);
$this->setPasswordHash($this->hashPassword($password));
return $this;
}
public function hashPassword($password, $salt = null)
{
return Mage::helper('core')->getHash($password, !is_null($salt) ? $salt : 2);
}
したがって、$salt
引数は整数 (2) であるため、実際のソルトはランダムに生成された文字列です。そのため、単純な場合とは異なる出力ハッシュが得られますmd5($passw)
。
また、ユーザー登録に取り組んでいたため、 getPassword() を直接操作していました
それは少し簡単です。registering
プロセス中に、$_POST
生のパスワードを含むデータがあります。あなたの助けを借りて、それをモデル$customer->setPassword($passw)
に設定します。上記のこの関数を見ると、このアクション中にとハッシュ属性$customer
の両方が設定されていることがわかります。唯一の違いは、実際には既存の属性ではないことです。つまり、DB やその他の場所には保存されず、オブジェクトがメモリから消去されるとすぐに失われます。password
password
password
$customer
Magento でユーザー パスワードを取得する方法はありません。あなたができる唯一のことは、与えられたパスワードを既存のものと比較することですpassword_hash
(前に述べたように):Mage_Core_Helper_Data::validateHash
public function validateHash($password, $hash)
{
$hashArr = explode(':', $hash);
switch (count($hashArr)) {
case 1:
return $this->hash($password) === $hash;
case 2:
return $this->hash($hashArr[1] . $password) === $hashArr[0];
}
Mage::throwException('Invalid hash.');
}