Prestashop 1.7 Клиент шифрует пароль - PullRequest
1 голос
/ 29 апреля 2019

Я сделал какую-то стороннюю систему, основанную на php для Prestashop 1.6. Работает с подключением напрямую к базе данных Prestashop. И знайте, я обновил мой Presta до 1.7.5.1, и ЭТО РАБОТАЕТ. Только это больше не регистрирует клиентов, потому что, как я вижу, шифрование пароля изменено. Я использовал md5 (COOKIE_KEY.'password ') для 1.6, но я вижу пароли на 1.7 ничего похожего на md5. Не могли бы вы сказать мне, как шифрование. (станет намного лучше, если вы скажете мне с php-кодом)

Prestashop 1.7.5.1

$ 2y $ 10 $ 6b460aRLklgWblz75NAMteYXLJwjfV6a / uN8GJKgJgPDBuNhHs.ym

для 123456

1 Ответ

1 голос
/ 29 апреля 2019

PrestaShop 1.7.x теперь использует bcrypt в качестве предпочтительного метода хеширования (хотя md5 все еще поддерживается).

Чтобы лучше понять поведение PrestaShop v1.6.x против 1.7.x для проверки паролей, давайте посмотрим на метод getByEmail() в классе Customer:

/**
  * Return customer instance from its e-mail (optionally check password).
  *
  * @param string $email e-mail
  * @param string $plaintextPassword Password is also checked if specified
  * @param bool $ignoreGuest
  *
  * @return bool|Customer|CustomerCore Customer instance
 */
 public function getByEmail($email, $plaintextPassword = null, $ignoreGuest = true)

Если указано $plaintextPassword, зашифрованная версия пароля возвращается с помощью:

$this->passwd = $crypto->hash($plaintextPassword);

Класс хеширования можно создать, выполнив:

$crypto = ServiceLocator::get('\\PrestaShop\\PrestaShop\\Core\\Crypto\\Hashing');

Решение для вашего примера с использованием PrestaShop 1.7 классы / методы:

<?php

namespace PrestaShop\PrestaShop\Core\Crypto;
include('config/config.inc.php');

$plaintextPassword = '123456';
$crypto = new Hashing;
$encryptedPassword = $crypto->hash($plaintextPassword, _COOKIE_KEY_);

echo 'Clear: '.$plaintextPassword.'<br />Encrypted: '.$encryptedPassword;

/* Result (example)
Clear: 123456
Encrypted: $2y$10$6b460aRLklgWblz75NAMteYXLJwjfV6a/uN8GJKgJgPDBuNhHs.ym */

Альтернативное решение, без необходимости включать какие-либо файлы / методы PrestaShop:

<?php

$plaintextPassword = '123456';
$encryptedPassword = password_hash($plaintextPassword, PASSWORD_BCRYPT);
echo var_dump(password_verify($plaintextPassword, $encryptedPassword)); // True if encryption is matching

Надеюсь, это поможет.

...