一部のユーザーを私のDrupal 7インストールから新しいDrupal 8インストールに移行します。サイト全体またはコンテンツを移行したくありません。また、すべてのユーザーを移行したくありません。
問題はパスワードです。 Drupal 7からエクスポートして、ユーザーをDrupal 8にインポートできますが、パスワードが機能しなくなります。ハッシュ(password )データベースに直接入力したので、Drupal 7からDrupal 8.にパスワードフィールドをコピーしました。これも機能しません。ソルトが変更されたと思いますDrupal 8。
これに対する解決策はありますか?
混乱させて申し訳ありません。 説明:
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]];
}
楽しんで。