ฉันพยายามโยกย้ายผู้ใช้จาก Drupal 6 ไปยังเว็บไซต์ Drupal 7 ปัญหาของฉันคือวิธีเปลี่ยนรหัสผ่านจาก MD5 เป็นรหัสแฮช (ใช้โดย D7)
คุณมีความคิดใด ๆ
ฉันพยายามโยกย้ายผู้ใช้จาก Drupal 6 ไปยังเว็บไซต์ Drupal 7 ปัญหาของฉันคือวิธีเปลี่ยนรหัสผ่านจาก MD5 เป็นรหัสแฮช (ใช้โดย D7)
คุณมีความคิดใด ๆ
คำตอบ:
ในการอัปเดตรหัสผ่าน md5 ไปเป็นรหัสที่ถูกแฮชฉันจำเป็นต้องใช้user_hash_password ()และเชื่อมต่อกับ 'U' นี่คือสคริปต์ที่ฉันเคยทำให้มันใช้งานได้
<?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();
}
}
}
จากนั้นฉันก็วิ่ง
drush scr <name_of_the_script_file>
และมันก็ใช้งานได้
มีคำตอบที่ง่ายมากสำหรับสิ่งนี้:
<?php
$this->destination = new MigrateDestinationUser(array('md5_passwords' => TRUE));
...
$this->addFieldMapping('pass', 'source_password');
?>
การอ้างอิง: การรักษารหัสผ่านผู้ใช้
หากใครต้องการสคริปต์ PHP แบบสแตนด์อโลนเพื่อย้ายผู้ใช้จาก Drupal 6 ไปเป็น Drupal 7 แสดงว่ามันคือ:
<?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";
}
}
}
?>
ดีถ้าคุณอัพเกรดคุณออกมาพร้อมกับรหัสผ่านของคุณตกลง ฉันเดาว่าคุณอาจจะดูที่รหัสการอัปเกรดเพื่อดูว่าพวกเขาทำได้อย่างไร
อย่างไรก็ตามหากคุณเพิ่งย้ายผู้ใช้วิธีที่น่าจะเป็นไปได้มากที่สุดก็คือเพียงแค่ส่งลิงก์เข้าสู่ระบบแบบครั้งเดียวให้กับทุกคนและให้พวกเขารีเซ็ตรหัสผ่าน
ถ้าฉันใช้สิ่งนี้จาก devel / php บนเว็บไซต์ D7 ฉันพบว่าฉันต้องการเพียง:
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";
}
}
}
ทั้งสองเว็บไซต์อยู่บนเว็บเซิร์ฟเวอร์เดียวกัน
$this->destination = new MigrateDestinationUser(array('md5_passwords' => TRUE)); ... $this->addFieldMapping('pass', 'source_password');