Magento 2: Як скинути пароль клієнта з бази даних


21

Це хеш для пароля клієнта в БД. Тож 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 роки, і відповіді не прийнято.
Даррен Фелтон

Відповіді:


40

Цей SQL працює чудово, щоб оновити пароль клієнта. Тестували за допомогою Magento 2.1.5.

Просто змініть "YOURPASSWORD" нижче (збережіть xxx: es) та voila!

UPDATE `customer_entity`
SET `password_hash` = CONCAT(SHA2('xxxxxxxxYOURPASSWORD', 256), ':xxxxxxxx:1')
WHERE `entity_id` = 1;

4
Зауважте, що це по суті створить незасолений пароль. Це добре, як процедура тестування, але його не слід застосовувати як звичайний метод у виробництві, або це значно послабить безпеку. Дивіться відповідь @ 7ochem для більш безпечного підходу, який генерує унікальні солі.
Скотт Бюкенан

Будь-який спосіб! Це рішення працює .. Дякуємо @Robban
Irfan

30

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

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;

Мені потрібно оновити всіх клієнтів одного db згенерованим паролем, чи є спосіб це зробити для всієї таблиці?
Крістоф Ферребоуф

Це дещо інше питання, можливо, варто відповісти на нього окремо. Чи можете ви поставити це як нове запитання? Я рада відповісти на це. Будь ласка, не забудьте додати свою версію Magento у запитанні
7ochem

Можливо, ви повинні використовувати правильний ідентифікатор особи клієнта, як у відповіді @ Роббана, а не електронну адресу клієнтів. У режимі мульти-магазину можливо, щоб однакова адреса електронної пошти відображалася в таблиці клієнтів-клієнтів кілька разів, і ви не хочете оновлювати їх усі, якщо ви не збираєтесь їх оновлювати!
Дом

7

Я не думаю, що встановити пароль можна всередині БД. Вам потрібен SHA256хеш для паролів клієнта. Ось як Magento генерує це:

Приклад пароля в БД:

7fe8104daf9ebd5c2ac427ec7312cd9456195b1a8ade188fa8bfd35e43bc0614: 7ilBNt4q5xYUSMyv8UX2a7gkmwv051Pm: 1

це формат:

A: B: C

Де

B = $salt= випадкова рядок з 32 символів

А = 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 поточного часу епохи ( time()) як сіль, але ви також можете використовувати будь-що інше.

Скопіюйте цей згенерований хеш та вставте його у свій запит чи інструмент управління базами даних у password_hashстовпчик запису клієнта .


2

Просто спробуйте нижченаведений запит mysql

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

Там, де entit_id - ваш ідентифікатор користувача, є 3 значення, розділені знаком: знак У нашому випадку

  1. По-перше, це md5 пароля
  2. Друге - порожнє або нулеве, оскільки ми не використовуємо жодної солі
  3. Третє - 0, щоб вказати на використання md5

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.