Wordpress - шифрование паролей импортированных пользователей - PullRequest
3 голосов
/ 21 ноября 2011

Я собираюсь импортировать около 10000 пользователей на мой сайт Wordpress из другой CMS. Проблема в том, что ни один из их паролей не будет работать, потому что они не зашифрованы.

Как быстро и так зашифровать все эти пароли, чтобы Wordpress распознал и принял их, чтобы пользователи могли войти?

Ответы [ 2 ]

1 голос
/ 23 ноября 2011

Поскольку шифрование и хеширование - разные вещи, я предполагаю, что все эти пароли представлены в текстовом формате.В этом случае все, что вам нужно сделать, это применить к ним алгоритм md5.

Вы можете сделать это из сценария импорта SQL или PHP.Взгляните на страницу Reset Your Password Codex, и это должно дать вам некоторое освещение.

В любом случае, вы не слишком далеко уйдете от:

require_once( ABSPATH . WPINC . '/registration.php');

$sql = "SELECT ALL USERS FROM YOUR TABLE";
$db = new wpdb (DB_USER, DB_PASSWORD, DB_NAME, DB_HOST);

$result = $db->get_results($sql);
foreach ($result as as $r) {
    wp_update_user(array(
        'user_login' => $r->username,
        'user_pass' => $r->password,
        'user_firstname' => $r->first_name
    ));
}

Просмотрите документацию по функциям get_userdata, чтобы узнать, какую пользовательскую информацию вы можете импортировать в первый момент.

0 голосов
/ 24 ноября 2011

Как оказалось, я нашел несколько других способов сделать это. Один из них выполняется через область mysql phpmyadmin (на вкладке «sql», как только вы выбрали правильную базу данных) и был опубликован Andrew Vit в другом потоке в stackoverflow:

UPDATE wp_users SET user_pass = MD5(user_pass) WHERE ...

для условия "где", если все ваши пароли имеют одинаковую длину, вы можете использовать следующее условие:

WHERE CHAR_LENGTH(wp_users.user_pass) = 12

Конечно, если длина вашего пароля отличается, просто измените «12» выше на любую длину вашего пароля. Если они НЕ имеют одинаковую длину символа, вам придется использовать некоторые другие критерии для определения того, какие пароли необходимо шифровать (если только они ВСЕ не должны быть зашифрованы, и в этом случае вы можете полностью исключить условие «где».

Я лично использовал php-скрипт для выполнения работы, чтобы пароли могли быть зашифрованы самим Wordpress (или, по крайней мере, используя метод, который использует Wordpress). Вот содержимое моего php файла:

<?php 
  require_once '/home/evaluate/public_html/members-blog/wp-config.php';

$sql="SELECT user_pass,ID FROM wp_users WHERE CHAR_LENGTH(wp_users.user_pass) = 12";
$find = mysql_query($sql) or die(mysql_error());

  while($row = mysql_fetch_array($find))
  {

  $current_password = $row['user_pass'];
  $current_id = $row['ID'];
  $hashed_password = wp_hash_password( $current_password );

  $update_sql= "UPDATE wp_users SET user_pass = '" . $hashed_password . "' WHERE ID = " . $current_id . "";
  $update = mysql_query($update_sql) or die(mysql_error());  

  echo $current_id . " " . $hashed_password;
  echo "<br />";
  }

 ?>

Сделано таким образом, пароли не только зашифрованы с использованием собственного метода Wordpress, но вы также получаете распечатку на экране каждый раз, когда запускаете скрипт, показывая вам идентификатор всех обновленных записей и предоставляя соответствующий хешированный пароль.

...