Magento 2: Cómo restablecer la contraseña del cliente desde la base de datos

19

Es hash para la contraseña del cliente en DB. Entonces MD5 & Sha1 no está funcionando.

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

Entonces, ¿cómo actualizar la contraseña utilizando la consulta de la base de datos? Puede ser MD5(Sha1('test123'))?

Cómo le está yendo a Magento a través del código. irvendor\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
fuente
Por favor considere aceptar la respuesta de @ 7ochem. Esta pregunta tiene 3 años y no hay respuesta aceptada.
Darren Felton

Respuestas:

38

Este SQL funciona bien para actualizar la contraseña del cliente. Probado con Magento 2.1.5.

Simplemente cambie "SU CONTRASEÑA" a continuación (conserve las xxx: es) y listo.

UPDATE `customer_entity`
SET `password_hash` = CONCAT(SHA2('xxxxxxxxYOURPASSWORD', 256), ':xxxxxxxx:1')
WHERE `entity_id` = 1;
Robban
fuente
44
Tenga en cuenta que esto esencialmente creará una contraseña sin sal. Está bien como procedimiento de prueba, pero no debe usarse como un método regular en la producción o debilitará significativamente la seguridad. Vea la respuesta de @ 7ochem para un enfoque más seguro que genera sales únicas.
Scott Buchanan
¡De todas formas! Esta solución está funcionando ... Gracias @Robban
Irfan Momin
30

Nunca pensé en usar el hashing SHA en SQL directamente hasta que vi la respuesta de Robban . Me gustaría agregar que también podría generar el hash en SQL, dejando solo la contraseña que debe agregarse. Puede usar variables ( set-instrucción ) para establecer todos los valores necesarios por adelantado:

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
fuente
Necesito actualizar a todos los clientes de un db con la contraseña generada, ¿hay alguna manera de hacer esto para toda la tabla?
Christophe Ferreboeuf
Esta es una pregunta ligeramente diferente, quizás valga la pena responderla por separado. ¿Puedes hacer esto como una nueva pregunta? Estoy feliz de responder eso. No olvide agregar su versión de Magento en la pregunta
7ochem
7

No creo que sea posible establecer la contraseña desde el interior de la base de datos. Necesita SHA256hashing para las contraseñas de los clientes. Así es como Magento lo genera:

ejemplo de contraseña en DB:

7fe8104daf9ebd5c2ac427ec7312cd9456195b1a8ade188fa8bfd35e43bc0614: 7ilBNt4q5xYUSMyv8UX2a7gkmwv051Pm: 1

este es el formato:

A B C

Dónde

B = $salt= cadena aleatoria de 32 caracteres

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

C = Versión del algoritmo de hash (predeterminado = 1)

Aaron Allen
fuente
¿Puedes dar con el ejemplo @Aaron? Supongamos que la contraseña es test. Ejemplo de PHP / Magento
Ankit Shah
7

Puede generar un hash de contraseña de estilo Magento 2 con bastante facilidad a través de PHP en la línea de comandos (CLI).

Use este comando para generar un hash, como ejemplo de contraseña test123(cámbielo a su propia contraseña):

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

Está usando MD5 del tiempo actual de Epoch ( time()) como una sal, pero también puede usar cualquier otra cosa.

Copie este hash generado y péguelo en su consulta o herramienta de administración de base de datos en la password_hashcolumna de un registro de cliente .

7ochem
fuente
2

Simplemente intente la siguiente consulta mysql

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

Donde entity_id es su ID de usuario Hay 3 valores separados por: signo En nuestro caso

  1. Primero es el md5 de contraseña
  2. El segundo está vacío o nulo ya que no estamos usando ninguna sal
  3. El tercero es 0 para indicar el uso de md5

Una vez que ejecute esta consulta en db y luego inicie sesión con la contraseña mencionada y regrese a la tabla de la base de datos y verifique la contraseña, notará que magento ha cambiado automáticamente la contraseña a la contraseña estándar de magento2, es decir, xxxxxx: aaaaa: 1

AbdulBasit
fuente