Opencart Войти пользовательский API с MySQL подготовить

Я делаю некоторые функции API входа в систему с MySQL подготовить и т. Д.

Правильная функция входа в систему, которую использует открытая корзина, заключается в следующем

$customer_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "customer WHERE LOWER(email) = '" . $this->db->escape(utf8_strtolower($email)) . "' AND (password = SHA1(CONCAT(salt, SHA1(CONCAT(salt, SHA1('" . $this->db->escape($password) . "'))))) OR password = '" . $this->db->escape(md5($password)) . "') AND status = '1' AND approved = '1'");

И я пытаюсь сделать это с MySQL подготовить заявление с помощью следующего кода.

$result = mysqli_prepare($db, "SELECT customer_id, firstname, lastname, email, telephone, fax, address_id, customer_group_id FROM `oa_customer` WHERE LOWER(email) = ? AND password = ? OR password = ? ;");

$md5pass = md5($password);
$newpass = "SHA1(CONCAT(salt, SHA1(CONCAT(salt, SHA1('" . $password . "'))))"echo "md5 ";
print_r($md5pass);
echo "new ";
print_r($newpass);
mysqli_stmt_bind_param($result, 'sss', utf8_strtolower($email), $password, $md5pass);
mysqli_stmt_execute($result);
mysqli_stmt_bind_result($result, $customerid, $firstname, $lastname, $email, $telephone, $fax, $address_id, $coustomer_group_id);

while(mysqli_stmt_fetch($result))
{
$id = $customerid;
$name = $firstname;
$surname = $lastname;
$email = $email;
$phone = $telephone;
$fax = $fax;
$addressid = $address_id;
$customergroup = $customer_group_id;

}
mysqli_stmt_close($result);
mysqli_close($db);

Моя единственная проблема — эта линия

$newpass = "SHA1(CONCAT(salt, SHA1(CONCAT(salt, SHA1('" . $password . "'))))"

Который пытается представить следующий код первого исходного запроса входа

(password = SHA1(CONCAT(salt, SHA1(CONCAT(salt, SHA1('" . $this->db->escape($password) . "')))))

Пока я пытаюсь это, я получаю ошибку 500 по запросу.

Вторая попытка была следующей.

Вместо того, чтобы использовать

$newpass = "SHA1(CONCAT(salt, SHA1(CONCAT(salt, SHA1('" . $this->db->escape($password) . "'))))"

Я заменил его

$newpass = sha1($salt . sha1($salt . sha1($password)));

И снова 500 ошибок.
Любая идея, что я должен сделать на моем MySQL подготовить так, чтобы он мог быть таким же, как исходный запрос?

Спасибо!

2

Решение

Вероятно, что-то вроде этого должно работать:

$db = new mysqli(DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
$result = mysqli_prepare($db, "SELECT customer_id, firstname, lastname, email, telephone, fax, address_id, customer_group_id
FROM `" . DB_PREFIX . "customer`
WHERE LOWER(email) = ?
AND password = SHA1(CONCAT(salt, SHA1(CONCAT(salt, SHA1(?)))))
");
mysqli_stmt_bind_param($result, 'ss', $email, $password);
mysqli_stmt_execute($result);
mysqli_stmt_bind_result($result, $customer_id, $firstname, $lastname, $email, $telephone, $fax, $address_id, $customer_group_id);

while(mysqli_stmt_fetch($result)) {
$id = $customer_id;
$name = $firstname;
$surname = $lastname;
$email = $email;
$phone = $telephone;
$fax = $fax;
$addressid = $address_id;
$customergroup = $customer_group_id;
}
mysqli_stmt_close($result);
mysqli_close($db);

md5 Опция в исходном запросе предназначена исключительно для поддержки устаревших данных и больше не используется Opencart для хранения паролей, поэтому, если вы не имеете дело с таблицей старше десяти лет, вы можете полностью отказаться от этой части. Также обратите внимание, что вам не нужно на самом деле экранировать пароль, так как инъекция sql 1-го порядка уже обработана подготовленным оператором, поэтому можно безопасно просто передать raw $password Параметр к заявлению.

Также, как отмечено в комментариях, уже есть классовые методы для получения данных, за которыми вы, похоже, следите. Например, когда пользователь вошел в систему, вы можете вызвать любой контроллер:

$lastname = $this->customer->getLastName();
$fax = $this->customer->getFax();

Так что, если все, что вам нужно — это доступ к свойствам класса, может быть полезно знать, что для этого уже есть методы.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector