Können Administratoren neue Konten ohne Passwörter erstellen?


10

Wenn ein Administrator ein neues Konto erstellt (admin / people / create), wird er aufgefordert, ein Kennwort für das Konto einzugeben. Mein Kunde möchte, dass der Administrator beim Erstellen eines Kontos im Back-End kein Kennwort eingeben muss, der Benutzer jedoch eine Benachrichtigung mit einem einmaligen Anmeldelink erhält und dann ein Kennwort festlegen kann Passwort nach dem Einloggen damit. Was ist der beste Weg, um so etwas zu erreichen?

Ich habe darüber nachgedacht, das Formular zu ändern, um die #default_valueKennwortfelder auf ein zufälliges Kennwort zu setzen und dann festzulegen '#access' => FALSE, aber ich bin mir nicht sicher, ob dies der beste Weg ist.

Antworten:


3

Es gibt ein Modul, das dies tut.

Check out Passwort generieren .

Diese zusätzliche Einstellung wird unter Konfiguration »Personen» Kontoeinstellungen eingeführt :

Benutzer können bei der Registrierung ein Passwort eingeben. Wenn leer, wird ein zufälliges Passwort generiert. Dies gilt immer dann, wenn ein Administrator das Konto erstellt.

Lassen Sie dann beim Erstellen des Kontos das Kennwortfeld leer, aktivieren Sie jedoch auch dieses Kontrollkästchen auf der Seite "Benutzer hinzufügen":

Benachrichtigen Sie den Benutzer über ein neues Konto

Das Ergebnis dieser beiden Einstellungen ist, dass das Modul ein zufälliges Kennwort generiert, wenn der Administrator ein Konto erstellt, und der Benutzer eine E-Mail mit einer Benachrichtigung über das Konto erhält und aufgefordert wird, ein Kennwort in dem enthaltenen einmaligen Anmeldelink festzulegen in der Benachrichtigung.

Wenn Sie erfahren möchten, wie es gemacht wird, lesen Sie den Quellcode.


2
Dieses Modul des ersten Codezeilen verwenden , hook_init()um drupal_add_css()auf jeder Seite zu laden ... es ist auch Kern des duplizieren user_password(). Besteht den Geruchstest nicht.
Garrett Albright

Stimmen Sie zu, @GarrettAlbright - halten Sie es für sinnvoll, GenPass zu verbessern (und zu vereinfachen) oder ein neues Modul zu erstellen ... oder es in ein vorhandenes Admin-Erlebnismodul einzubauen?
mlncn

Wie oft muss der Administrator dies tun? In meinem Fall ist es so etwas wie: Alle zwei Monate. Dies bedeutet, dass ich damit leben kann, dass GenPass nicht superoptimiert ist. Wenn Sie dies ständig tun, möchten Sie möglicherweise einige Zeit damit verbringen, GenPass zu verbessern oder ein besseres Modul zu schreiben.
Free Radical

Ich kann mich nicht an die Einzelheiten erinnern, aber IIRC Ich habe gerade den Ansatz gewählt, den ich in meinem OP erwähnt habe. Ausblenden des Passwortfeldes und einfaches Einstellen eines Passwortfelds mit user_password(mt_rand(10, 50))oder ähnlichem beim Senden des Formulars.
Garrett Albright

@FreeRadical Wenn es CSS zu jedem Seitenladevorgang hinzufügt, spielt es sicherlich keine Rolle, wie oft Sie die Funktion verwenden - es verlangsamt jede einzelne Seite, die
geliefert

3

Wenn Sie das Modul "Passwort generieren" nicht installieren möchten und mit Hooks vertraut sind, finden Sie hier eine Alternative:

/**
 * Implements hook_form_FORM_ID_alter().
 *
 * Remove the password field when admin is creating an account.
 */
function HOOK_form_user_register_form_alter(&$form, &$form_state, $form_id) {
  if ($form['administer_users']['#value']) {
    $form['account']['pass']['#access'] = FALSE;
    $form['account']['pass']['#value']['pass1'] = user_password();
    $form['account']['pass']['#value']['pass2'] = $form['account']['pass']['#value']['pass1'];
  }
}

Sie könnten es nach Ihrem Geschmack raffinierter machen. In der jetzigen Form wird das Kennwortfeld immer ausgeblendet und stattdessen ein Wert angegeben. Der Administrator muss das neue Konto bearbeiten, um einen bestimmten Wert festzulegen. Außerdem bleibt die Standardeinstellung "Benachrichtigen" deaktiviert, während Sie möglicherweise "Ein" bevorzugen.

Aktualisiert gemäß der Antwort von @joe_flash (jedoch in etwas kompakterer Form): Das Kennwortfeld wird bei der Verarbeitung des Elements in zwei Unterfelder ("pass1" und "pass2") erweitert.


1

Die Antwort von AdamS ist fast da. Da das Kennwortfeld bei der Verarbeitung des Elements ( form_process_password_confirm()) in zwei Unterfelder ("pass1" und "pass2") erweitert wird , benötigen Sie Folgendes :

/**
 * Implements hook_form_FORM_ID_alter().
 */
function acfo_common_form_user_register_form_alter(&$form, &$form_state, $form_id) {
  // Do special for user admins.
  if ($form['administer_users']['#value']) {
    // Default to sending user an account creation notification.
    $form['account']['notify']['#default_value'] = 1;

    // We'll send a one-time login link in lieu of setting a password here.
    $pass = user_password();
    $form['account']['pass']['#value'] = array(
      'pass1' => $pass,
      'pass2' => $pass,
    );
    $form['account']['pass']['#access'] = FALSE;
  }
}

Vielen Dank, ich habe meine Antwort aktualisiert (und Ihnen Kredit gegeben!). Es stellt sich heraus, dass ich den Arbeitscode bereits auf meinem Server hatte, aber versehentlich eine ältere Version in die Antwort kopiert haben muss, sorry.
AdamS
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.