Сброс/восстановление пароля в Drupal

Решил недавно заняться сайтом, к которому не прикасался уже достаточно давно. Открыв же заветную страницу входа в админку, неожиданно осознал, что пароль суперадминский мной забыт и не записан. Речь идет о сайте под управлением Drupal`а, естественно, зачем бы я иначе начал здесь разговор заводить.

В принципе, ничего страшного в такой ситуации нет, если имеется доступ к базе данных сайта и/или возможность работы с оным посредством командной строки (SSH).

Восстановление пароля в Drupal 6 и версиях старше

Посредством SQL-запроса к базе данных

UPDATE `users` SET `pass` = MD5('новый_пароль') WHERE `uid` =1; //Если есть надобность в сбросе пароля не суперадмина, а какого-либо иного пользователя, чей UID нам известен, то вместо циферки "1" подставляем нужную.

Восстановление с помощью Drush

Вариант раз: генерируем "одноразовую" ссылку для авторизации на сайте

drush uli

Вариант два: "прямой" сброс пароля

drush upwd --password="новый_пароль" имя_пользователя

Восстановление пароля в Drupal 7

Начиная с седьмой версии работа с пользовательскими паролями в Drupal была кардинальным образом изменена. Теперь генерация паролей происходит по гораздо более усложненным алгоритмам. Для желающих познать данный процесс более досконально есть официальная документация. Цели же данной публикации лишь прописать конкретные рецепты, без углубления в дебри API.

Метод раз

Самый прозаичный вариант. Способ предполагает, что у вас нет доступа к контактному email того, кому надобно поменять пароль, но имеется доступ к БД.

  • Соединяемся с БД (например через phpMyAdmin).
  • Находим в таблице пользователей того, кому нужно сменить пароль.
  • Меняем контактный мыл пациента на тот, письма на который можем получить. "Руками" или запросом:
    UPDATE users
    SET mail ='новый_мыл'
    WHERE uid = 1;  // Или UID другого, нужного нам, пользователя.
  • Заходим на страницу восстановления пароля и делаем запрос на новый мыл.

Метод два

Используем все тот же Drush.

Метод три (нужен доступ к БД и к сайту через командную строку)

Находясь в корневой директории нашей инсталляции Drupal выполняем в командной строке следующую команду:

./scripts/password-hash.sh новый_пароль

Если сервер находится под управлением ОС Windows, то команда будет выглядеть так:

php .\scripts\password-hash.sh newpwd

В результате выполнения вышеприведенной команды будет сгенерирован и выдан вам некий набор символов (хеш-код). Копируем его, соединяемся с БД и выполняем в ней запрос:

UPDATE users
SET pass ='хэш_код_скопированный_нами_ранее'
WHERE uid = 1;  // Или UID другого, нужного нам, пользователя.

Метод четыре: используем для восстановления php-файл с определенным сценарием

Не самый лучший вариант в плане безопасности, но работает и эрудиции ради упомянуть стоит.

Итак. Создаем в корневой папке нашего Drupal php-файл(назовем его pwd_reset.php) со следующим кодом:

define('DRUPAL_ROOT', getcwd());
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
require_once DRUPAL_ROOT . '/includes/password.inc';
if (isset($_GET['pass']) && !empty($_GET['pass'])) {
  $newhash =  user_hash_password($_GET['pass']);
}
else {
  die('Допишите строку: ?pass=PASSWORD в адрес запроса');
}

$updatepass = db_update('users')
  ->fields(array(
    'pass' => $newhash,
// Если есть надобность поменять, до кучи, имя пользователя и/или его email, то раскомментируйте ниженаписанные строки.
//    'name' => 'new_name',
//    'mail' => 'new_milo@example.com'
  ))
  ->condition('uid', '1', '=') // Подменяем UID по мере надобностей.
  ->execute();
print "Готово. Этот файл теперь лучше будет удалить!";
drupal_exit();

Далее. Запускаем наш php-файл с параметром pass:

http://example.com/pwd_reset.php?pass=новый_пароль

После успешной смены файл лучше удалить.

Dalay

Комментарии

Благодарю. Очень помогло.