Magento 2: Как сбросить пароль клиента из базы данных

19

Это хеш для пароля клиента в БД. Так что MD5 & Sha1 не работает.

UPDATE `customer_entity` SET `password` = MD5('test123') WHERE `email` = 'X@X.com';

Итак, как обновить пароль с помощью запроса к базе данных. Может быть MD5(Sha1('test123'))?

Как Magento делает с помощью кода. перейти кvendor\magento\module-customer\Console\Command\UpgradeHashAlgorithmCommand.php

protected function execute(InputInterface $input, OutputInterface $output)
{
    $this->collection = $this->customerCollectionFactory->create();
    $this->collection->addAttributeToSelect('*');
    $customerCollection = $this->collection->getItems();
    /** @var $customer Customer */
    foreach ($customerCollection as $customer) {
        $customer->load($customer->getId());
        if (!$this->encryptor->validateHashVersion($customer->getPasswordHash())) {
            list($hash, $salt, $version) = explode(Encryptor::DELIMITER, $customer->getPasswordHash(), 3);
            $version .= Encryptor::DELIMITER . Encryptor::HASH_VERSION_LATEST;
            $customer->setPasswordHash($this->encryptor->getHash($hash, $salt, $version));
            $customer->save();
            $output->write(".");
        }
    }
    $output->writeln(".");
    $output->writeln("<info>Finished</info>");
}
Анкит Шах
источник
Пожалуйста, рассмотрите возможность принятия ответа от @ 7ochem. Этому вопросу уже 3 года, и ответа не принято.
Даррен Фелтон

Ответы:

38

Этот SQL прекрасно работает для обновления пароля клиента. Протестировано с Magento 2.1.5.

Просто измените "YOURPASSWORD" ниже (оставьте xxx: es) и вуаля!

UPDATE `customer_entity`
SET `password_hash` = CONCAT(SHA2('xxxxxxxxYOURPASSWORD', 256), ':xxxxxxxx:1')
WHERE `entity_id` = 1;
Robban
источник
4
Обратите внимание, что это по существу создаст несоленый пароль. Это нормально в качестве процедуры тестирования, но не следует использовать в качестве обычного метода в производстве, иначе это значительно ослабит безопасность. См. Ответ @ 7ochem для более безопасного подхода, который генерирует уникальные соли.
Скотт Бьюкенен
Тем не мение! Это решение работает .. Спасибо @Robban
Ирфан Момин
30

Никогда не думал использовать алгоритм SHA хэширования в SQL непосредственно , пока я не увидел RobbaN «s ответ . Я хотел бы добавить, что вы также можете генерировать хеш в SQL, оставляя только пароль, который нужно добавить. Вы можете использовать переменные ( set-Statement ), чтобы установить все необходимые значения заранее:

SET @email='emailaddress@example.com', @passwd='test@123', @salt=MD5(RAND());

UPDATE customer_entity
    SET password_hash = CONCAT(SHA2(CONCAT(@salt, @passwd), 256), ':', @salt, ':1')
    WHERE email = @email;
7ochem
источник
Мне нужно обновить всех клиентов одной БД сгенерированным паролем, есть ли способ сделать это для всей таблицы?
Кристоф Ферребуф
Это немного другой вопрос, возможно, стоит ответить на него отдельно. Вы можете задать это как новый вопрос? Я рад ответить на это. Пожалуйста, не забудьте добавить свою версию Magento в вопросе
7
7

Я не думаю, что можно установить пароль внутри БД. Вам нужно SHA256хеширование для паролей клиентов. Вот как Magento генерирует это:

Пример пароля в БД:

7fe8104daf9ebd5c2ac427ec7312cd9456195b1a8ade188fa8bfd35e43bc0614: 7ilBNt4q5xYUSMyv8UX2a7gkmwv051Pm: 1

это формат:

А: В: С

где

B = $salt= случайная строка из 32 символов

A = hash('sha256', $salt . $password);

C = версия алгоритма хеширования (по умолчанию = 1)

Аарон Аллен
источник
Можете ли вы привести пример @Aaron. Предположим, пароль есть test. Пример PHP / Magento
Анкит Шах
7

Вы можете сгенерировать хеш пароля в стиле Magento 2 с помощью PHP в командной строке (CLI).

Используйте эту команду для создания хэша, например, для пароля test123(измените его на свой собственный пароль):

php -r '$salt=md5(time());
  echo hash("sha256", $salt.$argv[1]).":$salt:1\n";' test123

Он использует MD5 текущего времени Epoch ( time()) как соль, но вы также можете использовать что-нибудь еще.

Скопируйте этот сгенерированный хеш и вставьте его в свой инструмент управления запросами или базами данных в password_hashстолбце записи клиента .

7ochem
источник
2

Просто попробуйте следующий запрос MySQL

update customer_entity set password_hash = CONCAT(md5('test123'),"::0") where entity_id = 233;

Где entity_id - ваш идентификатор пользователя. Есть 3 значения, разделенные знаком: sign В нашем случае

  1. Во-первых, это md5 пароля
  2. Второй пустой или нулевой, так как мы не используем соль
  3. Третий 0, чтобы указать использование MD5

Как только вы выполните этот запрос в db, а затем войдете в систему с использованием упомянутого пароля и вернетесь к таблице базы данных и проверьте пароль, вы заметите, что magento автоматически сменил пароль на стандартный пароль magento2, то есть xxxxxx: yyyyyy: 1

Абдулбасит
источник