Kodda kullanıcı şifresi belirlensin mi?


9

Kodda bir kullanıcı şifresini değiştirmek istiyorum.

Yana user_loaddöner bir amacı ve user_savebir dizi ister bu sigara basittir.

Birisinin bunu yapmanın hızlı ve kolay bir yolunu bulduğunu varsayıyorum.


Mevcut çözümüm şöyle:

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

Ama bunun çoğu kancayı atlamasını sevmiyorum.

Yanıtlar:


19

Sadece user_save()aşağıdakine benzer bir kod kullanarak çağrı yapmanız yeterlidir .

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

$accountkullanıcı hesabının değiştireceği kullanıcı nesnesini içerir. Bunu kullanarak yüklemenizi sağlarım user_load(), ancak şu anda oturum açmış olan kullanıcının kullanıcı nesnesi de olabilir. İkinci durumda, Drupal oturumu aşağıdaki kodu ( user_save () 'nin bir parçası ) kullanarak yeniden oluşturur .

  // 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();
    }
  }

Parola $edit['pass']düz paroladır. user_save()(kodu fonksiyonun başlangıcında) kullanarak bunu karma ile değiştirir.

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

Alternatif olarak, drupal_submit_form () kullanabilirsiniz .

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

Bu şekilde, örneğin parolayı doğrulayan herhangi bir modülünüz varsa, kodu yürütülür ve form_get_errors () öğesinden herhangi bir hata kodu alırsınız .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.