Вам просто потрібно зателефонувати user_save()за допомогою коду, подібного до наступного.
$edit['pass'] = 'New password';
user_save($account, $edit);
$accountмістить об’єкт користувача для зміни облікового запису користувача. Я змушую вас завантажувати його за допомогою user_load(), але це також може бути об’єктом користувача для користувача, який зараз увійшов. В останньому випадку Drupal відновить сеанс, використовуючи наступний код (частина user_save () ).
// If the password changed, delete all open sessions and recreate
// the current one.
if ($account->pass != $account->original->pass) {
drupal_session_destroy_uid($account->uid);
if ($account->uid == $GLOBALS['user']->uid) {
drupal_session_regenerate();
}
}
Пароль в $edit['pass']- звичайний пароль. user_save()замінить його своїм хешем, використовуючи наступний код (на початку функції).
if (!empty($edit['pass'])) {
// Allow alternate password hashing schemes.
require_once DRUPAL_ROOT . '/' . variable_get('password_inc', 'includes/password.inc');
$edit['pass'] = user_hash_password(trim($edit['pass']));
// Abort if the hashing failed and returned FALSE.
if (!$edit['pass']) {
return FALSE;
}
}
В якості альтернативи ви можете використовувати drupal_submit_form () .
$form_state = array();
$form_state['user'] = $account;
$form_state['values']['pass']['pass1'] = 'New password';
$form_state['values']['pass']['pass2'] = 'New password';
$form_state['values']['op'] = t('Save');
drupal_form_submit('user_profile_form', $form_state);
Таким чином, якщо у вас є якийсь модуль, який, наприклад, перевіряє пароль, його код буде виконаний, і ви отримаєте будь-який код помилки з form_get_errors () .