Magento 2: Cara mengatur ulang Kata Sandi Pelanggan dari Database

19

Ini hash untuk kata sandi pelanggan di DB. Jadi MD5 & Sha1 tidak berfungsi.

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

Jadi cara memperbarui kata sandi menggunakan query database. Mungkin MD5(Sha1('test123'))?

Bagaimana kabar Magento melalui kode. pergi kevendor\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
sumber
Silakan pertimbangkan menerima jawaban dari @ 7ochem. Pertanyaan ini berumur 3 tahun sekarang dan tidak ada jawaban yang diterima.
Darren Felton

Jawaban:

38

SQL ini berfungsi dengan baik untuk memperbarui kata sandi pelanggan. Diuji dengan Magento 2.1.5.

Cukup ganti "YOURPASSWORD" di bawah (simpan xxx: es) dan voila!

UPDATE `customer_entity`
SET `password_hash` = CONCAT(SHA2('xxxxxxxxYOURPASSWORD', 256), ':xxxxxxxx:1')
WHERE `entity_id` = 1;
Robban
sumber
4
Perhatikan bahwa ini pada dasarnya akan membuat kata sandi yang tidak tawar. Ini bagus sebagai prosedur pengujian, tetapi tidak boleh digunakan sebagai metode reguler dalam produksi atau akan secara signifikan melemahkan keamanan. Lihat jawaban @ 7ochem untuk pendekatan yang lebih aman yang menghasilkan garam unik.
Scott Buchanan
Bagaimanapun caranya! Solusi ini berfungsi .. Terima kasih @Robban
Irfan Momin
30

Tidak pernah berpikir untuk menggunakan SHA hashing di SQL langsung sampai aku melihat Robban 's jawaban . Saya ingin menambahkan bahwa Anda dapat menghasilkan hash dalam SQL juga, hanya menyisakan kata sandi yang harus ditambahkan. Anda dapat menggunakan variabel ( set-pernyataan ) untuk mengatur semua nilai yang diperlukan dimuka:

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
sumber
Saya perlu memperbarui semua pelanggan satu db dengan kata sandi yang dihasilkan, apakah ada cara untuk melakukan ini untuk semua tabel?
Christophe Ferreboeuf
Ini adalah pertanyaan yang sedikit berbeda, mungkin layak dijawab secara terpisah. Bisakah Anda Menanyakan ini sebagai pertanyaan baru? Saya senang menjawabnya. Tolong jangan lupa untuk menambahkan versi Magento Anda dalam pertanyaan
7ochem
7

Saya pikir tidak mungkin mengatur kata sandi dari dalam DB. Anda membutuhkan SHA256hashing untuk kata sandi pelanggan. Begini cara Magento menghasilkannya:

contoh kata sandi dalam DB:

7fe8104daf9ebd5c2ac427ec7312cd9456195b1a8ade188fa8bfd35e43bc0614: 7ilBNt4q5xYUSMyv8UX2a7gkmwv051Pm: 1

ini formatnya:

A: B: C

Dimana

B = $salt= string acak dengan 32 karakter

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

C = Versi algoritma Hashing (default = 1)

Aaron Allen
sumber
Bisakah Anda memberi dengan contoh @ Harun. Misalkan kata sandi test. Contoh PHP / Magento
Ankit Shah
7

Anda dapat menghasilkan hash kata sandi Magento 2 style dengan cukup mudah melalui PHP on command line (CLI).

Gunakan perintah ini untuk menghasilkan hash, sebagai contoh untuk kata sandi test123(ubah itu menjadi kata sandi Anda sendiri):

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

Itu menggunakan MD5 waktu Epoch saat ini ( time()) sebagai garam, tetapi Anda juga bisa menggunakan hal lain.

Salin hash yang dihasilkan ini dan tempel ke kueri atau alat manajemen basis data Anda pada password_hashkolom catatan pelanggan .

7ochem
sumber
2

Coba saja permintaan mysql di bawah ini

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

Di mana entity_id adalah id pengguna Anda Ada 3 nilai yang dipisahkan oleh: sign In case kami

  1. Pertama adalah md5 kata sandi
  2. Kedua kosong atau nol karena kami tidak menggunakan garam apa pun
  3. Ketiga adalah 0 untuk menunjukkan penggunaan md5

Setelah Anda menjalankan kueri ini di db dan kemudian masuk menggunakan kata sandi yang disebutkan dan kembali ke tabel database dan memeriksa kata sandi Anda akan melihat bahwa magento secara otomatis telah mengubah kata sandi menjadi kata sandi magento2 standar yaitu xxxxxx: yyyyyy: 1

Abdul Basas
sumber