Đặt mật khẩu người dùng trong mã?


9

Tôi muốn có thể thay đổi mật khẩu người dùng trong mã.

user_loadtrả về một đối tượng và user_savemuốn một mảng, điều này không tầm thường.

Tôi cho rằng ai đó đã tìm ra một cách nhanh chóng và dễ dàng để làm điều đó.


Giải pháp hiện tại của tôi trông như:

db_update('users')
  ->fields(array('pass' => user_hash_password('some_password')))
  ->condition('uid', 1)
  ->execute();

Nhưng tôi không thích điều này bỏ qua hầu hết các móc.

Câu trả lời:


19

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);

$accountchứ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 () .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.