Magento 2: Veritabanından Müşteri Parolasını sıfırlama


21

DB müşteri şifresi için karma. Yani MD5 ve Sha1 çalışmıyor.

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

Yani veritabanı sorgusu kullanarak şifre nasıl güncellenir. Olabilir MD5(Sha1('test123'))mi?

Magento'nun kod yoluyla nasıl yaptığı. gitvendor\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>");
}

Lütfen @ 7ochem'in yanıtını kabul etmeyi düşünün. Bu soru şu anda 3 yaşında ve kabul edilmiş bir cevap yok.
Darren Felton

Yanıtlar:


40

Bu SQL, müşteri parolasını güncellemek için iyi çalışır. Magento 2.1.5 ile test edilmiştir.

Sadece aşağıdaki "YOURPASSWORD" (xxx: es) ve voila!

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

4
Bunun aslında tuzsuz bir şifre oluşturacağını unutmayın. Bir test prosedürü olarak iyidir, ancak üretimde normal bir yöntem olarak kullanılmamalıdır veya güvenliği önemli ölçüde zayıflatır. Benzersiz tuzlar üreten daha güvenli bir yaklaşım için @ 7ochem'in cevabına bakınız.
Scott Buchanan

Herhangi bir şekilde! Bu çözüm çalışıyor .. Thanks @Robban
Irfan Momin

30

Gördüğüm doğrudan kadar SQL SHA karma kullanmanın hiç düşünmemiştim Robban 'ın cevabı . Sadece eklenmesi gereken şifreyi bırakarak SQL'de karma oluşturabileceğinizi eklemek istiyorum. Gerekli tüm değerleri önceden ayarlamak için değişkenleri ( set-deyimi ) kullanabilirsiniz:

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;

Oluşturulan şifre ile bir db tüm müşterileri güncellemek gerekir, tüm tablo için bunu yapmanın bir yolu var mı?
Christophe Ferreboeuf

Bu biraz farklı bir soru, belki de ayrı cevaplamaya değer. Eğer Can sor yeni bir soru olarak? Buna cevap verdiğim için mutluyum. Lütfen Magento sürümünüzü soruya eklemeyi unutmayın
7ochem

Muhtemelen müşterilerin e-posta adresi yerine @ Robban'ın cevabındaki gibi doğru müşteri varlığı kimliğini kullanıyor olmalısınız. Çoklu mağaza modunda, aynı e-posta adresinin birden fazla kez customer_entity tablosunda görünmesi mümkündür ve hepsini güncellemek istemiyorsanız hepsini güncellemek istemezsiniz!
Dom

7

Ben DB içinden şifre ayarlamak mümkün sanmıyorum. SHA256Müşteri şifreleri için karma yapmanız gerekir . Magento bunu şöyle üretir:

DB'de örnek şifre:

7fe8104daf9ebd5c2ac427ec7312cd9456195b1a8ade188fa8bfd35e43bc0614: 7ilBNt4q5xYUSMyv8UX2a7gkmwv051Pm: 1

bu biçimdir:

ABC

Nerede

B = $salt= 32 karakterlik rastgele dize

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

C = Karma algoritma sürümü (varsayılan = 1)


U @aron ile verebilir misiniz. Varsayalım ki şifre test. PHP / Magento Örneği
Ankit Shah

7

Komut satırında (CLI) PHP ile kolayca Magento 2 stili bir şifre karması oluşturabilirsiniz.

Parola örneği olarak bir karma oluşturmak için bu komutu kullanın test123(bunu kendi parolanızla değiştirin):

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

Mevcut Epoch time ( time()) MD5'i bir tuz olarak kullanıyor, ancak başka bir şey de kullanabilirsiniz.

Bu oluşturulan karmayı kopyalayın ve bir müşteri kaydının password_hashsütununda sorgunuza veya veritabanı yönetimi aracına yapıştırın .


2

Sadece aşağıdaki mysql sorgusunu deneyin

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

Burada varlık_kimliği kullanıcı kimliğinizdir. İle ayrılmış 3 değer vardır: işaret Bizim durumumuzda

  1. İlk şifre md5
  2. İkincisi, hiç tuz kullanmadığımız için boş veya boş
  3. Üçüncü olarak md5 kullanımını belirtmek için 0

Bu sorguyu db'de çalıştırdıktan sonra belirtilen parolayı kullanarak oturum açıp veritabanı tablosuna dönüp parolayı kontrol ettikten sonra, magento'nun parolayı otomatik olarak standart magento2 parolasına değiştirdiğini fark edeceksiniz: xxxxxx: yyyyyy: 1

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.