Bạn chỉ cần gọi user_save()
bằng mã tương tự như sau.
$edit['pass'] = 'New password';
user_save($account, $edit);
$account
chứa đối tượng người dùng cho tài khoản người dùng để thay đổi. Tôi giúp bạn tải nó bằng cách sử dụng user_load()
, nhưng nó cũng có thể là đối tượng người dùng cho người dùng hiện đang đăng nhập. Trong trường hợp sau, Drupal sẽ tạo lại phiên bằng mã sau (một phần của 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();
}
}
Mật khẩu trong $edit['pass']
là mật khẩu đơn giản. user_save()
sẽ thay thế nó bằng hàm băm của nó bằng cách sử dụng đoạn mã sau (ở đầu hàm).
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;
}
}
Thay vào đó, bạn có thể sử dụng 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);
Theo cách này, nếu bạn có bất kỳ mô-đun nào, ví dụ, xác thực mật khẩu, mã của nó sẽ được thực thi và bạn sẽ nhận được bất kỳ mã lỗi nào từ form_get_errors () .