4

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

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

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

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

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

提前致谢。

4

3 回答 3

4

我认为最好的方法是自动生成密码以及帐户,所有这些都使用 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());
}
于 2012-06-29T22:08:56.003 回答
2

正如这个 wiki 页面所指出的,Magento 支持加盐和不加盐的 MD5 哈希。这在技术上是正确的,但让它工作起来就这么简单。

基本上,您需要使用空字符串作为盐复制 MD5 散列密码。

例如,取密码“foobar”,MD5 哈希为“3858f62230ac3c915f300c664312c63f”。如果你把它直接放在数据库中,它将不起作用。身份验证系统在密码哈希中查找“:”以获取盐。最重要的是,在末尾添加一个“:”,Magento 将对密码进行加盐,因此您只需返回常规的 MD5 哈希值。

“3858f62230ac3c915f300c664312c63f”->“3858f62230ac3c915f300c664312c63f:”</p>

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

于 2012-06-29T15:53:50.950 回答
0

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

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

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

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

于 2015-10-20T22:25:51.913 回答