Это пошаговое руководство по созданию входа пользователя в prestashop без прохождения через экран входа в систему. Это полезно, если вы не хотите, чтобы пользователь снова входил в систему, например, когда вы хотите перенести свою сессию с одного веб-сайта в prestashop.
Шаг 1 Устранить необходимость посола пароля. В config / settings.inc.php установите _COOKIE_KEY_ пустым. Обратите внимание, это также означает, что вы должны создать нового клиента. Или вы можете удалить старый пароль md5 из БД и добавить свой собственный.
Шаг 2 В файле authentication.php вставьте следующие строки после строки 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
}
Приведенный выше код позволяет пользователю войти в систему, используя $ email в качестве имени пользователя и $ passwd в качестве пароля в виде открытого текста. Оригинальный код взят из функции if (Tools::isSubmit('SubmitLogin'))
внутри файла authentication.php.
Шаг 3 Вставьте приведенный выше код в файл products.php сразу под строкой 5
Шаг 4 В случае, если вы отправляете $ passwd напрямую в формате md5, вот модифицированная версия getByEmail () (customer.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;
}
Вы можете получить доступ к имени пользователя / паролю через функцию $ _COOKIE [] или через $ _GET []. В любом случае это большой риск для безопасности. Чтение куки может быть помещено в файл index.php.