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.