Kullanıcıların şifrelerini Drupal 6'dan Drupal 7'ye nasıl taşıyabilirim?


20

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:


11

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ı.


Tekrarlama sayısı 11 standart bir D6 midir?
Sam152

7

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


5

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";
            }
        }

    }
    ?>

Lütfen nereye konması gerektiğini söyler misiniz?
Rootical V.

1
@Rootical V, komut dosyasına doğru yol ve veritabanı kimlik bilgilerini koymanız koşuluyla bu komut dosyasını herhangi bir konumdan komut satırı üzerinden çalıştırabilirsiniz.
Ajinkya Kulkarni

2

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.


Sadece drupal.org/project/login_one_time'ın views_bulk_operations ile entegre olduğunu fark ettim , bu yüzden şifreleri geçersiz kılacaksanız, bu onları yeniden oluşturmak için harika bir yol olacaktır.
rfay

0

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ı.


Şifreyi manuel olarak değiştirmeyi seçtiniz. Ayrıca göç modülü tarafından$this->destination = new MigrateDestinationUser(array('md5_passwords' => TRUE)); ... $this->addFieldMapping('pass', 'source_password');
Neograph734
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.