web-dev-qa-db-ja.com

ユーザーのパスワードを移行するにはどうすればよいですか?

一部のユーザーを私のDrupal 7インストールから新しいDrupal 8インストールに移行します。サイト全体またはコンテンツを移行したくありません。また、すべてのユーザーを移行したくありません。

問題はパスワードです。 Drupal 7からエクスポートして、ユーザーをDrupal 8にインポートできますが、パスワードが機能しなくなります。ハッシュ(password )データベースに直接入力したので、Drupal 7からDrupal 8.にパスワードフィールドをコピーしました。これも機能しません。ソルトが変更されたと思いますDrupal 8。

これに対する解決策はありますか?

3
Rainer Feike

混乱させて申し訳ありません。 説明

D7からD8へのハッシュのコピーが機能します(JSON出力でバックスラッシュを間違えました)!

したがって、D7.users.passフィールドからD8.users_field_data.passフィールドにD7ハッシュ($ S $で始まる)をコピーするだけです。それが動作します。ユーザーが初めて新しいD8サイトにログインするとき、パスワードはD8アルゴリズムで再ハッシュされます(PhpassHashedPassword.check()とPhpassHashedPassword.needsRehash()が魔法をかけています)。

すべて順調です:-)ありがとう。

編集:誰かがこれのコードを要求しました...

これは、ファイルasde2.users.jsonで見つかったすべてのDrupal 7ユーザーをインポートするコントローラークラスです。

  public function importAsde2Users() {
    // load asde2 user file
    $usersfile = $_SERVER['DOCUMENT_ROOT']."/".drupal_get_path('module', 'preosuser')."/asde2.users.json";
    PxLog::debug($this, "Loading asde2 users file ".$usersfile);
    // decode json array of objects
    $users = json_decode(file_get_contents($usersfile));
    PxLog::debug($this, "Found ".count($users)." Users in that file");
    $database = \Drupal::database();
    // import all of them
    foreach ($users as $user) {
      $newuser = \Drupal\user\Entity\User::create([
          'name' => $user->name,
          'pass' => $user->pass,
          'mail' => $user->mail,
          'status' => $user->status,
          'init' => $user->init,
          'created' => $user->created,
          'login' => $user->login,
          'access' => $user->access,
          'uid' => $user->uid,
        ]);
      $newuser->addRole("xx");
      $newuser->addRole("yy");
      $newuser->save();
      // dirty overwrite re-hashed hash
      $database->merge('users_field_data')
        ->fields(['pass' => $user->pass])
        ->keys(array('uid' => $user->uid))
        ->execute();
    }

    return ['#markup' => "Created ".count($users)." Users with that file", '#cache' => ['max-age' => 0]];
  }

楽しんで。

3
Rainer Feike