मैं एक 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');
?>
संदर्भ: उपयोगकर्ता पासवर्ड संरक्षित करना
अगर किसी को Drupal 6 से Drupal 7 में उपयोगकर्ताओं को स्थानांतरित करने के लिए एक स्वसंपूर्ण PHP स्क्रिप्ट की आवश्यकता है, तो यहाँ यह है:
<?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";
}
}
}
?>
ठीक है, अगर आप अपग्रेड करते हैं तो आप अपने पासवर्ड के साथ बाहर आते हैं ठीक है। मुझे लगता है कि आप अपग्रेड कोड को देखने के लिए देख सकते हैं कि वे ऐसा कैसे करते हैं।
हालाँकि, यदि आप उपयोगकर्ताओं को केवल माइग्रेट कर रहे हैं, तो संभवतः सबसे अधिक संभावना यह है कि हर किसी के लिए एक बार लॉगिन लिंक भेजने और उन्हें अपना पासवर्ड रीसेट करने के लिए प्राप्त करें।
अगर मैंने इसे डी 7 साइट पर डेवेल / php से चलाया, तो मैंने पाया कि मुझे केवल जरूरत है:
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');