Magento 2: come reimpostare la password del cliente dal database


19

È hash per la password del cliente nel DB. Quindi MD5 e Sha1 non funzionano.

UPDATE `customer_entity` SET `password` = MD5('test123') WHERE `email` = 'X@X.com';

Quindi, come aggiornare la password usando la query del database. Può essere MD5(Sha1('test123'))?

Come sta andando Magento tramite codice. vai avendor\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>");
}

Ti preghiamo di considerare di accettare la risposta di @ 7ochem. Questa domanda ha 3 anni e nessuna risposta accettata.
Darren Felton,

Risposte:


38

Questo SQL funziona perfettamente per aggiornare la password del cliente. Testato con Magento 2.1.5.

Basta cambiare "YOURPASSWORD" di seguito (mantenere xxx: es) e voilà!

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

4
Si noti che ciò creerà essenzialmente una password non salata. Va bene come procedura di test, ma non dovrebbe essere usato come un normale metodo di produzione o indebolirà significativamente la sicurezza. Vedi la risposta di @ 7ochem per un approccio più sicuro che genera sali unici.
Scott Buchanan,

Comunque! Questa soluzione funziona .. Grazie @Robban
Irfan Momin,

30

Non ho mai pensato di usare l'hashing SHA in SQL direttamente fino a quando non ho visto la risposta di Robban . Vorrei aggiungere che potresti generare l'hash anche in SQL, lasciando solo la password da aggiungere. È possibile utilizzare le variabili ( set-statement ) per impostare tutti i valori necessari in anticipo:

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;

Devo aggiornare tutti i clienti di un db con password generata, c'è un modo per farlo per tutta la tabella?
Christophe Ferreboeuf,

Questa è una domanda leggermente diversa, forse vale la pena di rispondere separatamente. Puoi porlo come una nuova domanda? Sono felice di risponderti. Non dimenticare di aggiungere la tua versione di Magento alla domanda
ottobre

7

Non credo sia possibile impostare la password dall'interno del DB. Hai bisognoSHA256 hashing per le password dei clienti. Ecco come lo genera Magento:

password di esempio nel DB:

7fe8104daf9ebd5c2ac427ec7312cd9456195b1a8ade188fa8bfd35e43bc0614: 7ilBNt4q5xYUSMyv8UX2a7gkmwv051Pm: 1

questo è il formato:

A: B: C

Dove

B = $salt = stringa casuale di 32 caratteri

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

C = Versione algoritmo hash (impostazione predefinita = 1)


Puoi dare con esempio @Aaron. Supponiamo che la password sia test. Esempio PHP / Magento
Ankit Shah,

7

Puoi generare un hash di password in stile Magento 2 abbastanza facilmente tramite PHP sulla riga di comando (CLI).

Utilizzare questo comando per generare un hash, come esempio per la password test123(modificarlo nella propria password):

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

Sta usando MD5 del tempo Epoch corrente ( time()) come sale, ma puoi anche usare qualsiasi altra cosa.

Copia questo hash generato e incollalo nella query o nello strumento di gestione del database nella password_hashcolonna del record di un cliente .


2

Prova la query mysql qui sotto

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

Dove entity_id è il tuo ID utente Ci sono 3 valori separati da: sign Nel nostro caso

  1. Il primo è il md5 della password
  2. Il secondo è vuoto o nullo poiché non stiamo usando alcun sale
  3. Il terzo è 0 per indicare l'uso di md5

Dopo aver eseguito questa query in db e quindi accedere utilizzando la password menzionata e tornare alla tabella del database e controllare la password, noterai che magento ha automaticamente cambiato la password in password standard magento2, ovvero xxxxxx: yyyyyy: 1

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.