Tetapkan kata sandi pengguna dalam kode?


9

Saya ingin dapat mengubah kata sandi pengguna dalam kode.

Karena user_loadmengembalikan suatu objek, dan user_savemenginginkan sebuah array, ini adalah non-sepele.

Saya berasumsi seseorang telah menemukan cara cepat dan mudah untuk melakukannya.


Solusi saya saat ini terlihat seperti:

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

Tapi saya tidak suka ini melewati sebagian besar kait.

Jawaban:


19

Anda hanya perlu menelepon user_save()menggunakan kode yang mirip dengan yang berikut ini.

$edit['pass'] = 'New password';
user_save($account, $edit);

$accountberisi objek pengguna untuk mengubah akun pengguna. Saya membuat Anda memuatnya menggunakan user_load(), tetapi bisa juga menjadi objek pengguna untuk pengguna yang saat ini masuk. Dalam kasus terakhir, Drupal akan membuat ulang sesi menggunakan kode berikut (bagian dari 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();
    }
  }

Kata sandi dalam $edit['pass']adalah kata sandi biasa. user_save()akan menggantinya dengan hash menggunakan kode berikut (di awal fungsi).

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

Sebagai alternatif, Anda dapat menggunakan 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);

Dengan cara ini, jika Anda memiliki modul apa pun yang, misalnya, memvalidasi kata sandi, kodenya akan dieksekusi, dan Anda akan mendapatkan kode kesalahan apa pun dari form_get_errors () .

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.