Fabiteby Posted October 30, 2017 Share Posted October 30, 2017 (edited) 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 October 30, 2017 by Fabiteby (see edit history) Link to comment Share on other sites More sharing options...
doekia Posted October 30, 2017 Share Posted October 30, 2017 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. 1 Link to comment Share on other sites More sharing options...
Fabiteby Posted October 30, 2017 Author Share Posted October 30, 2017 (edited) 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 October 30, 2017 by Fabiteby (see edit history) Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now