Magento 2: Como redefinir a senha do cliente do banco de dados

19

É hash para a senha do cliente no banco de dados. Portanto, o MD5 & Sha1 não está funcionando.

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

Então, como atualizar a senha usando a consulta ao banco de dados. Pode ser MD5(Sha1('test123'))?

Como o Magento está fazendo via código. vamos paravendor\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
fonte
Por favor, considere aceitar a resposta do @ 7ochem. Esta pergunta tem 3 anos agora e nenhuma resposta aceita.
Darren Felton

Respostas:

38

Esse SQL funciona bem para atualizar a senha do cliente. Testado com Magento 2.1.5.

Apenas mude "YOURPASSWORD" abaixo (mantenha o xxx: es) e pronto!

UPDATE `customer_entity`
SET `password_hash` = CONCAT(SHA2('xxxxxxxxYOURPASSWORD', 256), ':xxxxxxxx:1')
WHERE `entity_id` = 1;
Robban
fonte
4
Observe que isso essencialmente criará uma senha sem sal. É bom como um procedimento de teste, mas não deve ser usado como um método regular na produção, ou enfraquecerá significativamente a segurança. Veja a resposta da @ 7ochem para uma abordagem mais segura que gere sais únicos.
Scott Buchanan
De qualquer forma! Esta solução está funcionando .. Obrigado @Robban
Irfan Momin
30

Nunca pensei em usar o hash SHA no SQL diretamente até ver a resposta de Robban . Gostaria de acrescentar que você também pode gerar o hash no SQL, deixando apenas a senha que deve ser adicionada. Você pode usar variáveis ​​( set-statement ) para definir todos os valores necessários antecipadamente:

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
fonte
Preciso atualizar todos os clientes de um db com senha gerada, existe uma maneira de fazer isso para toda a tabela?
Christophe Ferreboeuf
Essa é uma pergunta um pouco diferente, talvez valha a pena respondê-la separadamente. Você pode Pergunte isso como uma nova pergunta? Fico feliz em responder isso. Por favor, não se esqueça de adicionar a sua versão Magento na questão
7ochem
7

Eu não acho que é possível definir a senha de dentro do banco de dados. Você precisa de SHA256hash para senhas de clientes. Veja como o Magento o gera:

exemplo de senha no DB:

7fe8104daf9ebd5c2ac427ec7312cd9456195b1a8ade188fa8bfd35e43bc0614: 7ilBNt4q5xYUSMyv8UX2a7gkmwv051Pm: 1

este é o formato:

ABC

Onde

B = $salt= sequência aleatória de 32 caracteres

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

C = Versão do algoritmo de hash (padrão = 1)

Aaron Allen
fonte
Você pode dar com o exemplo @Aaron. Suponha que a senha seja test. Exemplo de PHP / Magento
Ankit Shah
7

Você pode gerar um hash de senha no estilo Magento 2 com bastante facilidade via PHP na linha de comando (CLI).

Use este comando para gerar um hash, como exemplo para senha test123(altere isso para sua própria senha):

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

Ele está usando o MD5 do atual Epoch time ( time()) como um sal, mas você também pode usar qualquer outra coisa.

Copie esse hash gerado e cole-o em sua ferramenta de gerenciamento de consulta ou banco de dados na password_hashcoluna de um registro de cliente .

7ochem
fonte
2

Apenas tente a consulta mysql abaixo

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

Onde entity_id é seu ID de usuário Existem 3 valores separados por: sign No nosso caso

  1. Primeiro é o MD5 da senha
  2. O segundo está vazio ou nulo, pois não usamos sal.
  3. O terceiro é 0 para indicar o uso de md5

Depois de executar esta consulta no banco de dados e, em seguida, efetue login usando a senha mencionada, volte à tabela do banco de dados e verifique a senha, você notará que o magento alterou automaticamente a senha para a senha padrão do magento2, como xxxxxx: aaaaaa: 1

AbdulBasit
fonte