Benutzerpasswort im Code festlegen?

9

Ich möchte in der Lage sein, ein Benutzerpasswort im Code zu ändern.

Da user_loadein Objekt zurückgegeben wird und user_saveein Array gewünscht wird, ist dies nicht trivial.

Ich gehe davon aus, dass jemand einen schnellen und einfachen Weg gefunden hat, dies zu tun.


Meine aktuelle Lösung sieht aus wie:

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

Aber ich mag es nicht, dass dies die meisten Haken umgeht.

Letharion
quelle

Antworten:

19

Sie müssen nur user_save()mit einem Code aufrufen , der dem folgenden ähnlich ist.

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

$accountenthält das Benutzerobjekt, das das Benutzerkonto ändern soll. Ich bekomme Sie laden mit user_load(), aber es könnte auch das Benutzerobjekt für den aktuell angemeldeten Benutzer sein. Im letzteren Fall generiert Drupal die Sitzung mit dem folgenden Code neu (Teil von 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();
    }
  }

Das Passwort in $edit['pass']ist das einfache Passwort. user_save()ersetzt es durch seinen Hash mit dem folgenden Code (am Anfang der Funktion).

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

Alternativ können Sie drupal_submit_form () verwenden .

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

Wenn Sie über ein Modul verfügen, das beispielsweise das Kennwort überprüft , wird dessen Code ausgeführt und Sie erhalten einen Fehlercode von form_get_errors () .

kiamlaluno
quelle