2012-06-29 41 views
5

我正在將一個過時的Saas站點遷移到新的magento企業安裝中,並且不相信我將能夠傳輸客戶密碼。它們使用Perl crypt()函數進行加密。Magento無密碼遷移客戶。

我想知道最佳的工作流程可能是什麼,因爲我確信其他人必須碰到類似的東西。

我不介意發出一封電子郵件,要求我們所有的客戶創造了新的密碼,或要求他們,他們在下次登錄的時間。

但我應該把在密碼領域進口?爲了安全,我當然不能給每個人相同的臨時密碼。

我們有近123,000名顧客(其中許多人可能不再活躍),因此可能需要一段時間。

在此先感謝。

回答

5

我認爲最好的方法是用帳戶一起自動生成的密碼,全部採用Magento的內置功能,如下面所示:

$customer = Mage::getModel('customer/customer'); 

$password = '123456'; 
$email = '[email protected]'; 

$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()); 
} 
+1

我已經使用$ customer-> setPassword($ newPassword);而不是$ customer-> changePassword($ newPassword); –

+0

您使用的是Magento版本?以上測試使用1.6及以上版本。 –

+0

我正在使用Magento CE 1.7版本 –

2

正如本wiki頁面顯示,Magento的支持鹽醃以及 加鹽的MD5哈希值。這在技術上是正確的,但讓它起作用 這一切都很簡單。

基本上,您需要複製MD5哈希密碼,並將空字符串 作爲salt。

例如,取密碼「foobar」,MD5哈希值爲 「3858f62230ac3c915f300c664312c63f」。如果你直接把它放在 db中,它將不起作用。認證系統在 密碼哈希中查找「:」以獲取salt。底線,添加一個「:」到最後,並且Magento會將沒有密碼的密碼給你,所以你只需要返回定期的MD5散列。

「3858f62230ac3c915f300c664312c63f」 - > 「3858f62230ac3c915f300c664312c63f:」

你也可以簡單地隨機創建的密碼,它們是單向散列和客戶可以輕鬆重置密碼以生成新密碼,然後通過電子郵件發送給他們而不是嘗試導入現有密碼。

+1

謝謝,是的,他們不是MD5哈希密碼。我將不得不創建隨機密碼並讓它們重置。謝謝, – willboudle

0

重置用戶的密碼將是我的最後手段。如果您知道使用哈希方法來加密密碼,那麼您不需要重置密碼。

將客戶密碼遷移到magento數據庫中作爲哈希和鹽組合。然後,您可以在magento中重載密碼散列方法以檢查客戶是否有舊的散列或新的散列。

如果客戶有一箇舊的哈希使用您的舊加密方法和salt來檢查密碼。如果你想讓你可以更新到它成功驗證的新方法。

如果你能夠在PHP中創建最容易的散列函數。或者只需從PHP調用一個perl程序。