1

顧客をCubeCartからPrestashopに移動し、顧客に既存の顧客パスワードを保持したいと思います。

Prestashopフォーラムで、私が必要としていることを実行しているように見える投稿を見つけましたが、それはZenCart/OScommerceからPrestashopへの投稿です。したがって、私が助けを必要としているパスワードの構造にはわずかな違いがあります。以下を参照してください。

ZC / OSC
形式:1列、32文字の英数字+コロン+2文字の英数字のソルト。

e56d64755f66a86996b54114bb4102bf:08

CC
形式:2列、32文字の英数字+個別の6桁のランダムソルト。
例:
パスワード:e56d64755f66a86996b54114bb4102bf
ソルト:7pZcAF

だから私は2列のCCパスワード/ソルトで動作するように以下のコードを適応させるのに少し助けが欲しいです:

// == BEGIN ZEN-CART / OSCOMMERCE TO PRESTASHOP PASSWORD INTEGRATION ==
// == BY João Cunha - this.person@joaocunha.eti.br
// == @ 31/03/2012
// == USE AND MODIFY AT WILL
// == TESTED ON PRESTASHOP V1.4.7X
if (!$result) { //<- INVALID PRESTASHOP LOGIN, IT MAY BE A ZEN-CART / OSCOMMERCE     PASSWORD
//CHECK IF THE GIVEN EMAIL MATCHES A ROW IN OUR LEGACY TABLE AND RETRIEVES THE LEGACY     PASSWORD
$resultZC = Db::getInstance()->getRow('
SELECT `password`
FROM `zc_legacy_passwords`
WHERE `email` = \''.pSQL($email).'\'
AND `updated` = 0');

 if (!$resultZC)
return false; //<- EMAIL NOT FOUND IN NONE OF THE TABLES, SO IT IS AN INVALID LOGIN

//ENCRYPTS THE GIVEN PASSWORD IN ZEN-CART / OSCOMMERCE FORMAT
$salt = substr($resultZC['password'], strrpos($resultZC['password'],':')+1, 2);
$ZCpassword = md5($salt . $passwd) . ':' . $salt;

if ($ZCpassword != $resultZC['password'])
return false; //<- WRONG ZEN-CART/OSCOMMERCE PASSWORD GIVEN

//WE'LL UPDATE THE CUSTOMER TABLE WITH ITS PRESTASHOP ENCRYPTED PASSWORD...
Db::getInstance()->Execute('
                        UPDATE `'._DB_PREFIX_   .'customer`
                        SET `passwd` = \''.md5(pSQL(_COOKIE_KEY_.$passwd)).'\'
                        WHERE `email` = \''.pSQL($email).'\'');

//...AND FLAG IT AS UPDATED, SO THE NEXT TIME HE LOGS IN, HE WON'T ENTER THIS ROUTINE.
Db::getInstance()->Execute('
                UPDATE `zc_legacy_passwords`
                SET `updated` = 1
                WHERE `email` = \''.pSQL($email).'\'');

//USER IS AUTHENTICATED, OVERWRITE THE EMPTY $result VARIABLE
$result = Db::getInstance()->getRow('
SELECT *
FROM `'._DB_PREFIX_ .'customer`
WHERE `active` = 1
AND `email` = \''.pSQL($email).'\'
AND `deleted` = 0
AND `is_guest` = 0');
}
// == END ZEN-CART / OSCOMMERCE TO PRESTASHOP PASSWORD INTEGRATION

このコードは、古いソルトパスワードを新しいPrestashopパスワードタイプに更新します。

4

2 に答える 2

0

これはパスワードを確認するだけなので重要ではありません:

SELECT passwordFROM zc_legacy_passwordsWHERE email= \''.pSQL($email).'\' AND updated= 0');

次に、このコードはテーブル データベース ZenCart/OScommerce のパスワードをチェックします。削除またはコメントできます (無視してください)。

$salt = substr($resultZC['password'], strrpos($resultZC['password'],':')+1, 2); $ZCpassword = md5($salt . $passwd) . ':' . $ソルト;

if ($ZCpassword != $resultZC['password']) は false を返します。

これは、パスワードを prestashop に保存して変更するため、重要です (ここで変更する必要はありません)。

Db::getInstance()->Execute(' UPDATE '._DB_PREFIX_ .'customerSET passwd= \''.md5(pSQL(_COOKIE_KEY_.$passwd)).'\' WHERE email= \''.pSQL($email).'\'');

これを無視してください:

Db::getInstance()->Execute(' UPDATE zc_legacy_passwordsSET updated= 1 WHERE email= \''.pSQL($email).'\'');

これを無視してください:

$result = Db::getInstance()->getRow(' SELECT * FROM '._DB_PREFIX_ .'customerWHERE active= 1 AND email= \''.pSQL($email).'\' AND deleted= 0 AND is_guest= 0');

したがって、コードは次のようになります。

もし (!$結果) {

Db::getInstance()->Execute(' UPDATE '._DB_PREFIX_ .'customerSET

passwd= \''.md5(pSQL(_COOKIE_KEY_.$passwd)).'\' WHERE email=

\''.pSQL($email).'\'');

}

于 2012-10-25T08:27:08.163 に答える
0

異なる暗号化を使用してパスワードを移行することは非常に難しく、不可能ですらあります。したがって、あなたの質問には遅すぎるかもしれませんが、パスワードを移行したい人は誰でもパスワードを自動的に移行できるようにしてみてください。このツールは、クリックするだけで技術的なスキルを必要としません。LitExtensionは私の提案の 1 つです。もちろん、少しはお金を払わなければなりませんが、それほど多くはありません。

于 2016-09-13T07:50:33.150 に答える