Jump to content

Import Clients Magento


Recommended Posts

Une question qui a déjà été posée, mais qui n'a pas encore trouvé de réponse...
Je tente à mon tour.

J'ai importé une base de clients Magento sur un prestashop (1.7.2.4).
J'ai un souci pour les mots de passes qui ne sont pas cryptés de la même manière.

Y a-t-il une méthode pour s'en sortir sans redemander aux clients de modifier leur mot de passe ?

Merci par avance pour vos pistes ;)

Edited by Fabiteby (see edit history)
Link to comment
Share on other sites

Pas encore répondu? Il faut mieux chercher!

Exactement la même solution que pour l'import OScommerce ou tout autre import

Ajouter le crypto magento dans une/la table, overrider l'authentification pour si cette colonne/row remplie, comparer avec le même crypto-code que magento, si match, virer la colonne/record et recoder le pass selon ma méthode presta et mette à jour le champ password.

 

  • Thanks 1
Link to comment
Share on other sites

Un grand merci doekia pour m'avoir fourni cette solution ! :)

Effectivement, en ouvrant la recherche sur OScommerce au lieu de rester braqué sur Magento, j'ai trouvé les réponses que je cherchais à la base.

Je n'ai pas un grand niveau en php, mais il semble que je sois parvenu à mes fins (en me basant sur les fichiers partagés sur les forums).

Je place ci-dessous le code de mon override (pour le fichier override/classes/Customer.php pour prestashop 1.7.4.2), dans l'espoir que quelqu'un puisse y jeter un œil et me confirmer que tout va bien (gloups) - et que, si c'est le cas, cela puisse servir à d'autres personnes.

<?php
/*
 Copyright 2012 dSchoorens
*/
 use PrestaShop\PrestaShop\Adapter\ServiceLocator;
 class Customer extends CustomerCore
 {

     public function getByEmail($email, $plaintextPassword = null, $ignoreGuest = true)
     {


         if (!Validate::isEmail($email) || ($plaintextPassword && !Validate::isPasswd($plaintextPassword)))
             die (Tools::displayError());
             /*  Routine de test "mot de passe" oscommerce  */
             /*   Changer taille password dans table customer 32 --> 35 */
             if ($plaintextPassword) {
                 $sql = 'SELECT `passwd`
                 FROM `'._DB_PREFIX_.'customer`
                 WHERE `active` = 1
                 AND `email` = \''.pSQL($email).'\'
                 '.Shop::addSqlRestriction(Shop::SHARE_CUSTOMER).'
                 AND `deleted` = 0'.
                 ($ignoreGuest ? ' AND `is_guest` = 0' : '');
                 $result = Db::getInstance()->getRow($sql);
                 $two_points=substr($result['passwd'],-3,1);
                 if ($two_points==':') {
                     $encrypted=$result['passwd'];
                     $stack = explode(':', $encrypted);
                     if (sizeof($stack) == 2) {
                         if (md5($stack[1] . $plaintextPassword) == $stack[0]) {
                             Db::getInstance()->execute('
                                 UPDATE `'._DB_PREFIX_.'customer`
                                 SET `passwd` = \''.Tools::encrypt($plaintextPassword).'\'
                                 WHERE `email` = \''.pSQL($email).'\'
                                 '.Shop::addSqlRestriction(Shop::SHARE_CUSTOMER).'
                                 ');
                         }
                     }
                 }
             }
             /*  Routine de test "mot de passe" oscommerce  */
             $sql = 'SELECT *
             FROM `'._DB_PREFIX_.'customer`
             WHERE `active` = 1
             AND `email` = \''.pSQL($email).'\'
             '.Shop::addSqlRestriction(Shop::SHARE_CUSTOMER).'
             '.(isset($plaintextPassword) ? 'AND `passwd` = \''.Tools::encrypt($plaintextPassword).'\'' : '').'
             AND `deleted` = 0'.
             ($ignoreGuest ? ' AND `is_guest` = 0' : '');
             $result = Db::getInstance()->getRow($sql);



             /*  Prestashop 1.7.2.4  */
             if (!Validate::isEmail($email) || ($plaintextPassword && !Validate::isPasswd($plaintextPassword))) {
                 die(Tools::displayError());
             }

             $shopGroup = Shop::getGroupFromShop(Shop::getContextShopID(), false);

             $sql = new DbQuery();
             $sql->select('c.`passwd`');
             $sql->from('customer', 'c');
             $sql->where('c.`email` = \''.pSQL($email).'\'');
             if (Shop::getContext() == Shop::CONTEXT_SHOP && $shopGroup['share_customer']) {
                 $sql->where('c.`id_shop_group` = '.(int) Shop::getContextShopGroupID());
             } else {
                 $sql->where('c.`id_shop` IN ('.implode(', ', Shop::getContextListShopID(Shop::SHARE_CUSTOMER)).')');
             }

             if ($ignoreGuest) {
                 $sql->where('c.`is_guest` = 0');
             }
             $sql->where('c.`deleted` = 0');

             $passwordHash = Db::getInstance()->getValue($sql);
             try {
                 /** @var \PrestaShop\PrestaShop\Core\Crypto\Hashing $crypto */
                 $crypto = ServiceLocator::get('\\PrestaShop\\PrestaShop\\Core\\Crypto\\Hashing');
             } catch (CoreException $e) {
                 return false;
             }

             $shouldCheckPassword = !is_null($plaintextPassword);
             if ($shouldCheckPassword && !$crypto->checkHash($plaintextPassword, $passwordHash)) {
                 return false;
             }

             $sql = new DbQuery();
             $sql->select('c.*');
             $sql->from('customer', 'c');
             $sql->where('c.`email` = \''.pSQL($email).'\'');
             if (Shop::getContext() == Shop::CONTEXT_SHOP && $shopGroup['share_customer']) {
                 $sql->where('c.`id_shop_group` = '.(int) Shop::getContextShopGroupID());
             } else {
                 $sql->where('c.`id_shop` IN ('.implode(', ', Shop::getContextListShopID(Shop::SHARE_CUSTOMER)).')');
             }
             if ($ignoreGuest) {
                 $sql->where('c.`is_guest` = 0');
             }
             $sql->where('c.`deleted` = 0');

             $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($sql);

             if (!$result) {
                 return false;
             }

             $this->id = $result['id_customer'];
             foreach ($result as $key => $value) {
                 if (property_exists($this, $key)) {
                     $this->{$key} = $value;
                 }
             }

             if ($shouldCheckPassword && !$crypto->isFirstHash($plaintextPassword, $passwordHash)) {
                 $this->passwd = $crypto->hash($plaintextPassword);
                 $this->update();
             }

             return $this;
         }

     }

 

Edited by Fabiteby (see edit history)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...