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;

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;

Мне нужно обновить всех клиентов одной БД сгенерированным паролем, есть ли способ сделать это для всей таблицы?
Кристоф Ферребуф

Это немного другой вопрос, возможно, стоит ответить на него отдельно. Вы можете задать это как новый вопрос? Я рад ответить на это. Пожалуйста, не забудьте добавить свою версию 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столбце записи клиента .


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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.