Ich versuche, Benutzer von einer Drupal 6-Site auf eine Drupal 7-Site zu migrieren. Mein Problem ist, wie man sein Passwort von MD5 auf das Hash-Passwort (von D7 verwendet) ändert.
Hast du irgendeine Idee?
Ich versuche, Benutzer von einer Drupal 6-Site auf eine Drupal 7-Site zu migrieren. Mein Problem ist, wie man sein Passwort von MD5 auf das Hash-Passwort (von D7 verwendet) ändert.
Hast du irgendeine Idee?
Antworten:
Um das MD5-Passwort auf das Hash-Passwort zu aktualisieren, musste ich user_hash_password () verwenden und ein 'U' setzen. Hier ist das Skript, mit dem ich es erstellt habe.
<?php
require_once DRUPAL_ROOT . '/' . variable_get('password_inc', 'includes/password.inc');
$res = db_query('select * from drupal.users');
if($res) {
foreach ($res as $result) {
$hashed_pass = user_hash_password($result->pass, 11);
if ($hashed_pass) {
$hashed_pass = 'U' . $hashed_pass;
db_update('users')->fields(array('pass' => $hashed_pass))->condition('uid', $result->uid)->execute();
}
}
}
Dann rannte ich
drush scr <name_of_the_script_file>
Und es hat funktioniert.
Darauf gibt es eine sehr einfache Antwort:
<?php
$this->destination = new MigrateDestinationUser(array('md5_passwords' => TRUE));
...
$this->addFieldMapping('pass', 'source_password');
?>
Referenz: Benutzerkennwörter beibehalten
Wenn jemand ein eigenständiges PHP-Skript benötigt, um Benutzer von Drupal 6 auf Drupal 7 zu migrieren, dann ist dies hier:
<?php
/*
Standalone PHP script to migrate users from Drupal 6 to Drupal 7 programatically.
Date: 9-4-2012
*/
// set HTTP_HOST or drupal will refuse to bootstrap
$_SERVER['HTTP_HOST'] = 'example.org';
$_SERVER['REMOTE_ADDR'] = '127.0.0.1';
//root of Drupal 7 site
$DRUPAL7_ROOT="/var/www/ace";
define('DRUPAL_ROOT',$DRUPAL7_ROOT);
chdir($DRUPAL7_ROOT);
require_once "./includes/bootstrap.inc";
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
require_once "./includes/password.inc";
//connect to Drupal 6 database
//syntax:mysqli(hostname,username,password,databasename);
$db= new mysqli('localhost','ace6','ace6','ace6');
if(mysqli_connect_errno()) {
echo "Conection error. Could not connect to Drupal 6 site!";
exit;
}
//get users from Drupal 6 database
$query="select * from users";
$result=$db->query($query);
//count number of users
$num_results=$result->num_rows;
for($i=0;$i<$num_results;$i++){
//fetch each row/user
$row=$result->fetch_assoc();
//migrate only active users
if($row['status']==1){
//convert password from Drupal 6 style to Drupal 7 style
$hashed_pass='U'.user_hash_password($row['pass'],11);
//check if user with same email address already exists in Drupal 7 database, if it does, do not migrate
if (!user_load_by_mail($row['mail'])) {
$account = new stdClass;
$account->is_new = TRUE;
$account->name = $row['name'];
$account->pass = $hashed_pass;
$account->mail = $row['mail'];
$account->init = $row['mail'];
$account->status = TRUE;
$account->roles = array(DRUPAL_AUTHENTICATED_RID => TRUE);
$account->timezone = variable_get('date_default_timezone', '');
//create user in Drupal 7 site
user_save($account);
//print message
echo "User acount ".$row['name']." has been created\n";
}
}
}
?>
Na wenn du Upgrade durchführen, geben Sie Ihre Passwörter ein. Sie könnten sich wahrscheinlich den Upgrade-Code ansehen, um zu sehen, wie sie das tun.
Wenn Sie jedoch nur Benutzer migrieren, besteht der wahrscheinlichste Ansatz darin, nur einmalige Anmeldelinks an alle Benutzer zu senden und diese zum Zurücksetzen ihrer Kennwörter zu bewegen.
Wenn ich dies von devel / php auf der D7-Site ausgeführt habe, habe ich festgestellt, dass ich nur Folgendes brauchte:
require_once "./includes/password.inc";
//connect to Drupal 6 database
//syntax:mysqli(hostname,username,password,databasename);
$db= new mysqli('localhost','ace6','ace6','ace6');
if(mysqli_connect_errno()) {
echo "Conection error. Could not connect to Drupal 6 site!";
exit;
}
//get users from Drupal 6 database
$query="select * from users";
$result=$db->query($query);
//count number of users
$num_results=$result->num_rows;
for($i=0;$i<$num_results;$i++){
//fetch each row/user
$row=$result->fetch_assoc();
//migrate only active users
if($row['status']==1){
//convert password from Drupal 6 style to Drupal 7 style
$hashed_pass='U'.user_hash_password($row['pass'],11);
//check if user with same email address already exists in Drupal 7 database, if it does, do not migrate
if (!user_load_by_mail($row['mail'])) {
$account = new stdClass;
$account->is_new = TRUE;
$account->name = $row['name'];
$account->pass = $hashed_pass;
$account->mail = $row['mail'];
$account->init = $row['mail'];
$account->status = TRUE;
$account->roles = array(DRUPAL_AUTHENTICATED_RID => TRUE);
$account->timezone = variable_get('date_default_timezone', '');
//create user in Drupal 7 site
user_save($account);
//print message
echo "User acount ".$row['name']." has been created\n";
}
}
}
Beide Sites befanden sich auf demselben Webserver.
$this->destination = new MigrateDestinationUser(array('md5_passwords' => TRUE)); ... $this->addFieldMapping('pass', 'source_password');