Как программно изменить пароль пользователя Drupal? - PullRequest
9 голосов
/ 14 октября 2010

Мы собираемся развернуть сайт Drupal во внутренней сети компании. Для пользователя требуется сброс пароля. У нас есть централизованный механизм сброса пароля (для единого входа):

  • пользователь отправляет запрос на изменение пароля в системе
  • запрос отправлен на сервер паролей
  • сервер паролей сбросит пароль пользователя в во всех системах с новым паролем
  • сервер паролей отправит новый пароль на мобильный телефон пользователя через смс

Теперь мы собираемся добавить сайт Drupal ко всем системам . Пожалуйста, предложите способ изменить пароль входа в Drupal с помощью внешней программы (предположим, что система может запустить скрипт на хосте Drupal и редактировать базу данных Drupal MySQL).

Ответы [ 5 ]

7 голосов
/ 17 августа 2014

Для Drupal 7 - надеюсь, что этот код пользовательской функции разрешит изменить пароль для анонимного пользователя.

function password_reset(){
    global $user;
    $hashthepass = 'password'; /* Your password value*/
    require_once DRUPAL_ROOT . '/' . variable_get('password_inc', 'includes/password.inc');
    $hashthepass = user_hash_password(trim($hashthepass));
    // Abort if the hashing failed and returned FALSE.
    if (!$hashthepass) {
      return FALSE;
    }
    else {
      db_update('users')
        ->fields(array(
          'pass' => $hashthepass
        ))
        ->condition('uid', $user->uid)       
        ->execute();
    }
 }
4 голосов
/ 14 октября 2010

Если вы используете Drupal 6, то пароль, хранящийся в системе, представляет собой простое значение md5 пароля.Если вы используете php-скрипты для запуска сброса пароля, используйте функцию http://php.net/manual/en/function.md5.php.

Имя пользователя и пароль хранятся в таблице users.Хэш md5 хранится в столбце pass.

1 голос
/ 09 сентября 2016

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

// ID of the user whose password you wish to change.
$uid = 1;

// Load the user account.
$account = user_load($uid);

// Load hashing libraries.
// You can use module_load_include() if you want to make it cleaner.
require_once DRUPAL_ROOT . '/' . variable_get('password_inc', 'includes/password.inc');

// Generate new password hash.
$password_hash = user_hash_password('enter-new-password-here');
if (!$password_hash) {
  // Password could not be hashed. Handle the error.
  exit('Password could not be hashed.');
}

$account->pass = $password_hash;
user_save($account);

Если все настроено правильно, пароль вашего пользователя будет обновлен.

Примечание: Если вы забыли свой пароль root, вы можете спокойно игнорировать обработку ошибок и т. Д. Добавьте эти строки в index.php до menu_execute_active_handler (); и откройте любую страницу, чтобы сбросить пароль.Не забудьте удалить строки после того, как вы закончите!

1 голос
/ 18 июля 2016

Вот еще один более сложный подход к Drupal 7, основанный на данном $username. Он также поддерживает адреса электронной почты, используемые в качестве имени пользователя.

$users = user_load_multiple(array(), array('mail' => $username, 'status' => '1'));
$account = reset($users);
if (!$account) {
  // No success, try to load by name.
  $users = user_load_multiple(array(), array('name' => $username, 'status' => '1'));
  $account = reset($users);
}

if ($account) {
  $account->pass = 'new password';
  user_save($account);
}
else {
  watchdog('user', 'Cannot load user: %user', array('%user' => $username), array(), WATCHDOG_ERROR);
}
1 голос
/ 13 марта 2016

Другая возможность для Drupal 7:

$user = user_load($GLOBALS['user']->uid);
$user->pass = 'the new password';
user_save((object) array('uid' => $user->uid), (array) $user);

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...