Magento 2:データベースから顧客パスワードをリセットする方法


19

DBの顧客パスワードのハッシュです。そのため、MD5とSha1は機能していません。

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

データベースクエリを使用してパスワードを更新する方法。かもしれないMD5(Sha1('test123'))

Magentoのコード経由の動作。に行きますvendor\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>");
}

@ 7ochemからの回答を受け入れることを検討してください。この質問は現在3歳であり、受け入れられる回答はありません。
ダレンフェルトン

回答:


37

このSQLは、顧客のパスワードを更新するためにうまく機能します。Magento 2.1.5でテスト済み。

以下の「YOURPASSWORD」を変更し(xxx:esを保持)、出来上がりです!

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

4
これにより、基本的に無塩パスワードが作成されることに注意してください。テスト手順としては問題ありませんが、運用環境で通常の方法として使用しないでください。使用すると、セキュリティが著しく低下します。独自のソルトを生成するより安全なアプローチについては、@ 7ochemの回答を参照してください。
スコットブキャナン

とにかく!このソリューションは機能しています。ありがとうございます。@ Robban
Irfan Momin

30

Robban答えを見るまで、SQLでSHAハッシュを直接使用することを考えたことがありません。追加する必要があるパスワードのみを残して、SQLでもハッシュを生成できることを追加したいと思います。変数(set-statement)を使用して、必要なすべての値を事前に設定できます。

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;

生成されたパスワードで1つのdbのすべての顧客を更新する必要がありますが、すべてのテーブルに対してこれを行う方法はありますか?
クリストフフェレボフ

これは少し異なる質問であり、個別に回答する価値があるかもしれません。これを新しい質問としてお願いできます?それに答えてうれしいです。質問にMagentoバージョンを追加することを忘れないでください
7ochem

7

データベース内からパスワードを設定することは不可能だと思います。SHA256お客様のパスワードにはハッシュが必要です。Magentoが生成する方法は次のとおりです。

DBのパスワードの例:

7fe8104daf9ebd5c2ac427ec7312cd9456195b1a8ade188fa8bfd35e43bc0614:7ilBNt4q5xYUSMyv8UX2a7gkmwv051Pm:1

これはフォーマットです:

A:B:C

どこ

B = $salt= 32文字のランダムな文字列

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

C =ハッシュアルゴリズムバージョン(デフォルト= 1)


@Aaronの例を挙げてください。パスワードがであるとしますtest。PHP /
マゼンタの

7

コマンドライン(CLI)でPHPを使用して、Magento 2スタイルのパスワードハッシュを非常に簡単に生成できます。

このコマンドを使用して、パスワードの例としてハッシュを生成しますtest123(それを自分のパスワードに変更します):

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

現在のエポック時間のMD5(time())をソルトとして使用していますが、他のものも使用できます。

この生成されたハッシュをコピーし、クエリまたはデータベース管理ツールの顧客レコードのpassword_hash列に貼り付けます。


2

以下のmysqlクエリを試してください

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

entity_idがユーザーIDである場合、次のように3つの値で区切られています:sign

  1. 最初はパスワードのmd5です
  2. 塩を使用していないため、2番目は空またはnullです
  3. 3番目は0で、md5を使用することを示します

dbでこのクエリを実行し、前述のパスワードを使用してログインし、データベーステーブルに戻ってパスワードを確認すると、magentoが自動的にパスワードを標準のmagento2パスワード、つまりxxxxxx:yyyyyy:1に変更したことがわかります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.