Magento 2: Cách đặt lại mật khẩu khách hàng từ cơ sở dữ liệu


19

Đó là hàm băm cho mật khẩu khách hàng trong DB. Vì vậy, MD5 & Sha1 không hoạt động.

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

Vậy làm thế nào để cập nhật mật khẩu bằng truy vấn cơ sở dữ liệu. Có thể là MD5(Sha1('test123'))gì?

Làm thế nào Magento đang làm thông qua mã. đi đếnvendor\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>");
}

Vui lòng xem xét chấp nhận câu trả lời từ @ 7ochem. Câu hỏi này đã được 3 tuổi và không có câu trả lời được chấp nhận.
Darren Felton

Câu trả lời:


37

SQL này hoạt động tốt để cập nhật mật khẩu của khách hàng. Đã thử nghiệm với Magento 2.1.5.

Chỉ cần thay đổi "YOUPASSWORD" bên dưới (giữ nguyên xxx: es) và thì đấy!

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

4
Lưu ý rằng điều này về cơ bản sẽ tạo ra một mật khẩu không được đánh dấu. Nó tốt như một quy trình thử nghiệm, nhưng không nên được sử dụng như một phương pháp thông thường trong sản xuất hoặc nó sẽ làm suy yếu đáng kể an ninh. Xem câu trả lời của @ 7ochem để biết cách tiếp cận an toàn hơn, tạo ra các muối độc đáo.
Scott Hội trưởng

Dù sao! Giải pháp này đang hoạt động .. Cảm ơn @Robban
Irfan Momin

30

Không bao giờ nghĩ đến việc sử dụng băm SHA trong SQL trực tiếp cho đến khi tôi thấy câu trả lời của Robban . Tôi muốn thêm rằng bạn cũng có thể tạo hàm băm trong SQL, chỉ để lại mật khẩu cần được thêm. Bạn có thể sử dụng các biến ( câu lệnh set) để đặt trước tất cả các giá trị cần thiết:

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;

Tôi cần cập nhật tất cả các khách hàng của một db với mật khẩu được tạo, có cách nào để làm điều này cho tất cả các bảng không?
Barshe Ferreboeuf

Đây là một câu hỏi hơi khác nhau, có thể đáng để trả lời riêng. Bạn có thể hỏi điều này như một câu hỏi mới? Tôi rất vui được trả lời điều đó. Xin đừng quên thêm phiên bản Magento của bạn trong câu hỏi
7ochem

7

Tôi không nghĩ có thể đặt mật khẩu từ bên trong DB. Bạn cần SHA256băm cho mật khẩu của khách hàng. Đây là cách Magento tạo ra nó:

mật khẩu ví dụ trong DB:

7fe8104daf9ebd5c2ac427ec7312cd9456195b1a8ade188fa8bfd35e43bc0614: 7ilBNt4q5xYUSMyv8UX2a7gkmwv051Pm: 1

đây là định dạng:

A: B: C

Ở đâu

B = $salt= chuỗi ngẫu nhiên gồm 32 ký tự

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

Phiên bản thuật toán băm C = (mặc định = 1)


Bạn có thể đưa ra ví dụ @Aaron. Giả sử mật khẩu là test. Ví dụ về PHP / Magento
Ankit Shah

7

Bạn có thể tạo hàm băm mật khẩu kiểu Magento 2 khá dễ dàng thông qua PHP trên dòng lệnh (CLI).

Sử dụng lệnh này để tạo hàm băm, ví dụ cho mật khẩu test123(thay đổi mật khẩu thành mật khẩu của riêng bạn):

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

Nó đang sử dụng MD5 của thời gian Epoch hiện tại ( time()) như một loại muối, nhưng bạn cũng có thể sử dụng bất cứ thứ gì khác.

Sao chép hàm băm được tạo này và dán nó vào công cụ quản lý cơ sở dữ liệu hoặc truy vấn của bạn trên password_hashcột của hồ sơ khách hàng .


2

Chỉ cần thử truy vấn mysql dưới đây

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

Trong đó entity_id là id người dùng của bạn Có 3 giá trị được phân tách bằng: đăng nhập trong trường hợp của chúng tôi

  1. Đầu tiên là md5 của mật khẩu
  2. Thứ hai là trống hoặc null vì chúng tôi không sử dụng bất kỳ muối
  3. Thứ ba là 0 để chỉ sử dụng md5

Khi bạn chạy truy vấn này trong db và sau đó đăng nhập bằng mật khẩu đã đề cập và quay lại bảng cơ sở dữ liệu và kiểm tra mật khẩu, bạn sẽ thấy magento tự động thay đổi mật khẩu thành mật khẩu magento2 tiêu chuẩn, ví dụ xxxxxx: yyyyyy: 1

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.