gpt4 book ai didi

Magento加载客户数据不起作用

转载 作者:行者123 更新时间:2023-12-04 05:28:25 24 4
gpt4 key购买 nike

我的观察员功能之一有问题。
出于某种原因,我无法加载客户信息以进行进一步操作

$user = $observer->getEvent()->getCustomer();
$usertemp = Mage::getModel('customer/customer')->load($user->getId());

我检查了 $user->getId() 实际上带有 id;但是,当我尝试时,例如:
$password = $usertemp->getPassword(); 

设置空值而不是用户的密码。

最佳答案

首先 - 如果你已经有一个来自 customer 的对象,你为什么要加载 $observer->getEvent()->getCustomer() 对象?这个操作在这里是多余的,只会增加资源和时间的消耗。

第二 - 为了安全措施,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 的散列是 0f474c41fd20617eb8f1a0cb9b08f3aa:Uh 而它在 md5 中应该是 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 模型中的这两个方法:
    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),因此实际的 salt 是随机生成的字符串。这就是为什么你有不同的输出哈希,而不是你简单的 md5($passw)
  • Also I was working directly with the getPassword() because it was working on user register



    这样容易一些。在 registering 过程中,您有一个带有原始密码的 $_POST 数据。在 $customer->setPassword($passw) 的帮助下,您将其设置为 $customer 模型。如果您查看上面的此函数,您将看到在此操作期间设置了 passwordpassword 哈希属性。唯一的区别是:password 并不是真正存在的属性,这意味着它不会存储在 DB 或其他任何地方,并且一旦 $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.');
    }

    关于Magento加载客户数据不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12923641/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com