Иногда бывает так, что напрочь забываешь пароль к одному из своих сайтов на Drupal'e. Вводишь, вводишь, а на выходе получаешь следующее сообщение:
Sorry, there have been more than 5 failed login attempts for this account. It is temporarily blocked. Try again later or request a new password.
И хорошо если система восстановления пароля работает, но частенько либо почтовый ящик указан случайный, либо почтовый сервер не поднят (например, если это чисто дев-сайт на локалхосте). Поэтому единственное, что остается - это сбросить пароль на новый. Для этого, собственно, надо сделать два действия - обнулить количество неудачных попыток ввода пароля, чтобы снялась блокировка, ну и заменить старый пароль на новый.
Обнуление количества попыток ввода пароля
Неудачные попытки ввода пароля хранятся в базе данных, в таблице flood. Все что нам надо сделать, это очистить ее. После чего блокировка будет снята.
Создание нового пароля
Хэш нашего старого пароля хранится в таблице users в столбце pass напротив нужного пользователя (нулевого пользователя не существует, пользователь #1 и есть админ, своего рода root).
Следовательно, нам надо удалить старый хэш и вставить новый, соответствующий новому же паролю. И если в Drupal 6 хэш пароля представлял из себя обычный md5, то в семерке все несколько сложнее, и алгоритм уже sha512, и соль используется для каждого сайта индивидуальная, и итерационно берется хеш от хеша раз пятнадцать.
Собственно, вариантов сгенерировать хэш несколько. Это и попытаться разобраться в исходниках (includes/password.inc), и написать свой модуль, где воспользоваться готовым АПИ (user_hash_password), и создать нового тестового пользователя на сайте с нужным паролем и скопировать из БД сгенерированный в результате хэш... Да, как-то все сложно. Но благо есть более простой и правильный путь.
Разработчики Друпал предусмотрели такое развитие событий и создали скриптик password-hash.sh, который лежит в каждом дистрибутиве Друпала в папке scripts.
Алгоритм действия такой:
- Запускаем консоль.
- Переходим в корень нашего сайта (это важно).
- Запускаем скрипт password-hash.sh с единственным аргументом (паролем, для которого требуется сгенерировать хэш).
- Получаем на выходе хэш.
- Копируем его, вставляем в базу данных в соответствующую ячейку.
Где NEWPASSWORD - наш новый пароль.
Все не так уж и сложно, оказывается.