Magento 2: Jak zresetować hasło klienta z bazy danych

21

Jest hash dla hasła klienta w DB. Więc MD5 i Sha1 nie działają.

UPDATE `customer_entity` SET `password` = MD5('test123') WHERE `email` = '[email protected]';

Jak zaktualizować hasło za pomocą zapytania do bazy danych. Może być MD5(Sha1('test123'))?

Jak działa Magento za pomocą kodu. iść dovendor\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>");
}
Ankit Shah
źródło
Proszę rozważyć przyjęcie odpowiedzi od @ 7ochem. To pytanie ma teraz 3 lata i nie ma akceptowanej odpowiedzi.
Darren Felton,

Odpowiedzi:

40

Ten kod SQL działa dobrze, aby zaktualizować hasło klienta. Testowane z Magento 2.1.5.

Po prostu zmień „HASŁO” poniżej (zachowaj xxx: es) i voila!

UPDATE `customer_entity`
SET `password_hash` = CONCAT(SHA2('xxxxxxxxYOURPASSWORD', 256), ':xxxxxxxx:1')
WHERE `entity_id` = 1;
Robban
źródło
4
Pamiętaj, że spowoduje to utworzenie niesolonego hasła. Jest w porządku jako procedura testowa, ale nie powinna być stosowana jako zwykła metoda w produkcji, ponieważ znacznie obniży bezpieczeństwo. Zobacz odpowiedź @ 7ochem, aby uzyskać bardziej bezpieczne podejście, które generuje unikalne sole.
Scott Buchanan,
Tak czy siak! To rozwiązanie działa .. Dzięki @Robban
Irfan Momin
30

Nigdy nie myślałem o użyciu SHA hashowania w SQL bezpośrednio dopóki nie zobaczyłem RobbaN „s odpowiedź . Chciałbym dodać, że możesz wygenerować skrót również w języku SQL, pozostawiając tylko hasło, które należy dodać. Możesz użyć zmiennych ( zestaw-instrukcji ), aby ustawić wszystkie niezbędne wartości z góry:

SET @email='[email protected]', @passwd='test@123', @salt=MD5(RAND());

UPDATE customer_entity
    SET password_hash = CONCAT(SHA2(CONCAT(@salt, @passwd), 256), ':', @salt, ':1')
    WHERE email = @email;
7ochem
źródło
Muszę zaktualizować wszystkich klientów jednego db przy użyciu wygenerowanego hasła, czy istnieje sposób, aby to zrobić dla całej tabeli?
Christophe Ferreboeuf,
To nieco inne pytanie, być może warto na nie odpowiedzieć osobno. Czy możesz to zadać jako nowe pytanie? Z przyjemnością odpowiem na to pytanie. Nie zapomnij dodać swojej wersji Magento do pytania
7ochem
Prawdopodobnie powinieneś używać poprawnego identyfikatora jednostki klienta, jak w odpowiedzi @ Robban, zamiast adresu e-mail klienta. W trybie wielu sklepów możliwe jest wielokrotne wyświetlanie tego samego adresu e-mail w tabeli customer_entity i nie chcesz aktualizować ich wszystkich, chyba że masz zamiar je wszystkie zaktualizować!
Dom
7

Nie sądzę, że można ustawić hasło z poziomu bazy danych. Potrzebujesz SHA256hasła do haseł klientów. Oto jak Magento to generuje:

przykładowe hasło w DB:

7fe8104daf9ebd5c2ac427ec7312cd9456195b1a8ade188fa8bfd35e43bc0614: 7ilBNt4q5xYUSMyv8UX2a7gkmwv051Pm: 1

to jest format:

ABC

Gdzie

B = $salt= losowy ciąg 32 znaków

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

C = Wersja algorytmu mieszania (domyślnie = 1)

Aaron Allen
źródło
Czy możesz podać przykład @Aaron. Załóżmy, że hasło to test. Przykład PHP / Magento
Ankit Shah
7

Możesz łatwo wygenerować skrót hasłowy w stylu Magento 2 za pośrednictwem PHP w wierszu poleceń (CLI).

Użyj tego polecenia, aby wygenerować skrót, jako przykład hasła test123(zmień je na własne hasło):

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

Wykorzystuje MD5 bieżącego czasu Epoki ( time()) jako sól, ale możesz także użyć wszystkiego innego.

Skopiuj wygenerowany skrót i wklej go do narzędzia do zarządzania zapytaniami lub bazą danych w password_hashkolumnie rekordu klienta .

7ochem
źródło
2

Wystarczy wypróbować poniższe zapytanie mysql

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

Gdzie ID_użytkownika jest twoim identyfikatorem użytkownika Istnieją 3 wartości oddzielone: ​​znak W naszym przypadku

  1. Pierwszy to md5 hasła
  2. Drugi jest pusty lub zerowy, ponieważ nie używamy soli
  3. Trzeci to 0, co oznacza użycie md5

Po uruchomieniu tego zapytania w db, a następnie zaloguj się przy użyciu wspomnianego hasła i wróć do tabeli bazy danych i sprawdź hasło, zauważysz, że magento automatycznie zmieniło hasło na standardowe hasło magento2, tj. Xxxxxx: rrrrr: 1

AbdulBasit
źródło