Il s'agit d'une procédure pas à pas expliquant comment connecter un utilisateur à prestashop sans passer par l'écran de connexion. Ceci est utile si vous ne voulez pas que l'utilisateur se connecte à nouveau, comme lorsque vous souhaitez transférer sa session d'un site Web vers prestashop.Noob façon de se connecter à l'utilisateur dans Prestashop
Étape 1 Éliminez le besoin d'un mot de passe de salage. Sous config/settings.inc.php, définissez _COOKIE_KEY_ sur vide. Notez que cela signifie également que vous devez créer un nouveau client. Ou vous pouvez supprimer l'ancien mot de passe md5 de DB et ajouter le vôtre.
Étape 2 Dans le fichier authentication.php coller les lignes suivantes après la ligne 6:
$customer = new Customer();
//$authentication = $customer->getByEmail(trim($email), trim($passwd));
$authentication = $customer->getByMd5(trim($email), trim($passwd)); //modified version of getByEmail if we are not accepting $passwd in cleartext but in md5.
/* Handle brute force attacks */
sleep(1);
if (!$authentication OR !$customer->id)
$errors[] = Tools::displayError('authentication failed');
else
{
$cookie->id_customer = intval($customer->id);
$cookie->customer_lastname = $customer->lastname;
$cookie->customer_firstname = $customer->firstname;
$cookie->logged = 1;
$cookie->passwd = $customer->passwd;
$cookie->email = $customer->email;
if (Configuration::get('PS_CART_FOLLOWING') AND (empty($cookie->id_cart) OR Cart::getNbProducts($cookie->id_cart) == 0))
$cookie->id_cart = intval(Cart::lastNoneOrderedCart(intval($customer->id)));
Module::hookExec('authentication');
if ($back = Tools::getValue('back'))
Tools::redirect($back);
//Tools::redirect('my-account.php'); //cut redirection to break infinite loop
}
Le code ci-dessus est ce qui fait la connexion de l'utilisateur en utilisant $ email comme nom d'utilisateur et $ passwd comme mot de passe en texte clair. Le code d'origine provient de la fonction if (Tools::isSubmit('SubmitLogin'))
dans le fichier authentication.php.
Étape 3 Collez le code ci-dessus dans le fichier products.php juste sous la ligne 5
Étape 4 Si vous envoyez $ passwd directement au format md5, voici la version modifiée de (client getByEmail(). php):
public function getByMd5($email, $passwd = NULL)
{
$result = Db::getInstance()->GetRow('SELECT * FROM `'._DB_PREFIX_ .'customer` WHERE `active` = 1 AND `email` = \''.pSQL($email).'\' '.(isset($passwd) ? 'AND `passwd` = \''.pSQL(_COOKIE_KEY_.$passwd).'\'' : '').' AND `deleted` = 0');
if (!$result)
return false;
$this->id = $result['id_customer'];
foreach ($result AS $key => $value)
if (key_exists($key, $this))
$this->{$key} = $value;
return $this;
}
Vous pouvez avoir accès au nom d'utilisateur/passwd soit par la fonction $ _COOKIE [] ou par $ _GET []. De toute façon c'est un gros risque de sécurité. La lecture des cookies peut être placée dans le fichier index.php.