【问题标题】:Magento Migrate customers with no password.Magento 无需密码即可迁移客户。
【发布时间】:2017-05-19 17:38:09
【问题描述】:

我正在将过时的 Saas 站点迁移到新的 magento 企业安装,但我不相信我能够转移客户密码。它们是使用 Perl crypt() 函数加密的。

我想知道最好的工作流程可能是什么,因为我确信其他人一定遇到过类似的事情。

我不介意必须发送一封电子邮件,要求我们所有的客户创建一个新密码,或者在他们下次登录时要求他们创建一个新密码。

但是我应该在导入的密码字段中输入什么?为了安全起见,我肯定不能给每个人相同的临时密码。

我们有近 123,000 名客户(但其中许多可能不再活跃),因此可能需要一点时间。

提前致谢。

【问题讨论】:

    标签: magento


    【解决方案1】:

    我认为最好的方法是自动生成密码以及帐户,所有这些都使用 Magento 的内置功能,如下所示:

    $customer = Mage::getModel('customer/customer');
    
    $password = '123456';
    $email = 'testuser@test.com';
    
    $customer->setWebsiteId(Mage::app()->getWebsite()->getId());
    $customer->loadByEmail($email);
    
    if(!$customer->getId()) { // if customer does not already exists, by email
        // new data
        $customer->setEmail($email);
        $customer->setFirstname('Johnny');
        $customer->setLastname('Doels');
        $newPassword = $customer->generatePassword(); // generate a new password
        $customer->changePassword($newPassword); // set it
    
    } else {
        // do something here for existing customers
    }
    
    try {
        $customer->save();
        $customer->setConfirmation(null);
        $customer->save();
        $customer->sendPasswordReminderEmail(); // save successful, send new password
    }
    
    catch (Exception $ex) {
        //Zend_Debug::dump($ex->getMessage());
    }
    

    【讨论】:

    • 我用过 $customer->setPassword($newPassword);而不是 $customer->changePassword($newPassword);
    • 您使用的是哪个 Magento 版本?以上是用1.6及以上版本测试的。
    • 我使用的是 Magento CE 1.7 版本
    【解决方案2】:

    正如此 wiki 页面所示,Magento 支持 salted 以及 未加盐的 MD5 哈希。这在技术上是正确的,但让它发挥作用 就是这么简单。

    基本上,您需要复制带有空的 MD5 哈希密码 字符串作为盐。

    例如,输入密码“foobar”,MD5 哈希为 “3858f62230ac3c915f300c664312c63f”。如果你直接把它放在 db,它不会工作。身份验证系统在 密码哈希来获取盐。最后,在末尾添加一个“:”并 Magento 将不加盐密码,因此您只需获得 常规 MD5 哈希返回。

    “3858f62230ac3c915f300c664312c63f”-> “3858f62230ac3c915f300c664312c63f:”

    您也可以简单地随机创建密码,它们是一种散列方式,客户可以轻松重置密码以生成新密码,该密码将通过电子邮件发送给他们,而不是尝试导入现有密码。

    【讨论】:

    • 谢谢,是的,它们不是 MD5 散列密码。我将不得不创建随机密码并让他们重置它们。谢谢,
    【解决方案3】:

    重置用户密码将是我最后的手段。如果您知道使用什么散列方法来加密密码,那么您应该不需要重置密码。

    将客户密码作为哈希和盐的组合迁移到 magento 数据库中。然后,您可以在 magento 中重载密码散列方法,以检查客户是旧散列还是旧散列或新散列。

    如果客户有旧的哈希,请使用旧的 crypt 方法和 salt 来检查密码。如果你愿意,你可以更新到它成功验证的新方法。

    如果您能够在 php 中创建散列函数,那将是最简单的。或者,只需从 php 调用 perl 程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-28
      • 2011-09-14
      • 2016-11-23
      • 1970-01-01
      相关资源
      最近更新 更多