Magento 2: Wie man das Kundenpasswort aus der Datenbank zurücksetzt

18

Es ist ein Hash für das Kundenpasswort in der DB. MD5 & Sha1 funktionieren also nicht.

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

So aktualisieren Sie das Kennwort mithilfe der Datenbankabfrage. Kann sein MD5(Sha1('test123'))?

Wie es Magento per Code geht. gehe zuvendor\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
quelle
Bitte akzeptieren Sie die Antwort von @ 7ochem. Diese Frage ist jetzt 3 Jahre alt und wird nicht beantwortet.
Darren Felton

Antworten:

36

Diese SQL funktioniert gut, um das Kundenpasswort zu aktualisieren. Getestet mit Magento 2.1.5.

Ändere einfach "DEIN PASSWORT" unten (behalte die xxx: es) und voila!

UPDATE `customer_entity`
SET `password_hash` = CONCAT(SHA2('xxxxxxxxYOURPASSWORD', 256), ':xxxxxxxx:1')
WHERE `entity_id` = 1;
Robban
quelle
4
Beachten Sie, dass dadurch im Wesentlichen ein ungesalzenes Kennwort erstellt wird. Es ist als Testverfahren in Ordnung, sollte aber nicht als reguläre Methode in der Produktion verwendet werden, da es die Sicherheit erheblich beeinträchtigt. Siehe die Antwort von @ 7ochem für einen sichereren Ansatz, der einzigartige Salze erzeugt.
Scott Buchanan
Wie auch immer! Diese Lösung funktioniert .. Danke @Robban
Irfan Momin
30

Hätte nie gedacht , von SHA - Hashing in SQL mit direkt bis ich sah , Robban ‚s Antwort . Ich möchte hinzufügen, dass Sie den Hash auch in SQL generieren können, wobei nur das Passwort übrig bleibt, das hinzugefügt werden sollte. Sie können Variablen ( set-Anweisung ) verwenden, um alle erforderlichen Werte im Voraus festzulegen:

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
quelle
Ich muss alle Kunden einer Datenbank mit dem generierten Passwort aktualisieren. Gibt es eine Möglichkeit, dies für die gesamte Tabelle zu tun?
Christophe Ferreboeuf
Dies ist eine etwas andere Frage, die es möglicherweise wert ist, separat beantwortet zu werden. Können Sie fragen diese als eine neue Frage? Das beantworte ich gerne. Bitte vergessen Sie nicht, Ihre Magento-Version in der Frage
7ochem
7

Ich glaube nicht, dass es möglich ist, das Passwort in der DB zu setzen. Sie benötigen SHA256Hashing für Kundenpasswörter. So generiert Magento es:

Beispiel Passwort in DB:

7fe8104daf9ebd5c2ac427ec7312cd9456195b1a8ade188fa8bfd35e43bc0614: 7ilBNt4q5xYUSMyv8UX2a7gkmwv051Pm: 1

Dies ist das Format:

ABC

Wo

B = $salt= Zufällige Zeichenfolge mit 32 Zeichen

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

C = Version des Hashing-Algorithmus (Standard = 1)

Aaron Allen
quelle
Kannst du mit Beispiel @Aaron geben. Angenommen, das Kennwort lautet test. PHP / Magento-Beispiel
Ankit Shah
7

Sie können ganz einfach einen Magento 2-Stil-Passwort-Hash über PHP auf der Befehlszeile (CLI) generieren.

Verwenden Sie diesen Befehl, um einen Hash als Beispiel für ein Passwort zu generieren test123(ändern Sie das in Ihr eigenes Passwort):

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

Es wird MD5 der aktuellen Epochenzeit ( time()) als Salz verwendet, aber Sie können auch alles andere verwenden.

Kopieren Sie diesen generierten Hash und fügen Sie ihn in Ihre Abfrage oder Ihr Datenbankverwaltungstool in der password_hashSpalte eines Kundendatensatzes ein .

7ochem
quelle
2

Probieren Sie einfach die folgende MySQL-Abfrage

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

Dabei ist entity_id Ihre Benutzer-ID. In unserem Fall gibt es drei Werte, die durch Zeichen voneinander getrennt sind

  1. Erstens ist die MD5 von Passwort
  2. Zweitens ist leer oder null, da wir kein Salz verwenden
  3. Der dritte Wert ist 0, um anzugeben, dass md5 verwendet wird

Sobald Sie diese Abfrage in db ausführen und sich dann mit dem angegebenen Passwort anmelden und zur Datenbanktabelle zurückkehren und das Passwort überprüfen, werden Sie feststellen, dass Magento das Passwort automatisch in das Standard-Magento2-Passwort geändert hat, dh xxxxxx: yyyyyy: 1

AbdulBasit
quelle