Kullanıcıları Drupal 6'dan Drupal 7 sitesine geçirmeye çalışıyorum. Benim sorunum nasıl şifreleri MD5 karma bir (D7 tarafından kullanılan) değiştirmek.
Herhangi bir fikrin var mı?
Kullanıcıları Drupal 6'dan Drupal 7 sitesine geçirmeye çalışıyorum. Benim sorunum nasıl şifreleri MD5 karma bir (D7 tarafından kullanılan) değiştirmek.
Herhangi bir fikrin var mı?
Yanıtlar:
Md5 parolasını karma olarak güncellemek için user_hash_password () kullanmam ve bir 'U' işlemi yapmam gerekiyordu . İşte bunu yapmak için kullandığım komut dosyası.
<?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();
}
}
}
Sonra koştum
drush scr <name_of_the_script_file>
Ve işe yaradı.
Bunun ÇOK basit bir cevabı var:
<?php
$this->destination = new MigrateDestinationUser(array('md5_passwords' => TRUE));
...
$this->addFieldMapping('pass', 'source_password');
?>
Referans: Kullanıcı şifrelerini koruma
Birisi kullanıcıları Drupal 6'dan Drupal 7'ye geçirmek için bağımsız bir PHP komut dosyasına ihtiyaç duyarsa, işte burada:
<?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";
}
}
}
?>
Eğer yükseltme yaparsanız, şifrelerinizi tamam çıkıyor. Sanırım bunu nasıl yaptıklarını görmek için yükseltme koduna bakabilirsiniz.
Ancak, yalnızca kullanıcıları taşıyorsanız, muhtemelen en olası yaklaşım herkese bir kerelik giriş bağlantıları göndermek ve şifrelerini sıfırlamalarını sağlamak olacaktır.
Bu D7 sitesinde devel / php den koştum, ben sadece gerekli bulundu:
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";
}
}
}
Her iki site de aynı web sunucusundaydı.
$this->destination = new MigrateDestinationUser(array('md5_passwords' => TRUE)); ... $this->addFieldMapping('pass', 'source_password');