Gli amministratori possono creare nuovi account senza password?


10

Quando un amministratore crea un nuovo account (admin / people / create), viene richiesto di inserire una password per l'account. Il mio cliente vuole che sia quando un account viene creato nel back-end, l'amministratore non deve inserire una password, ma all'utente viene inviato un messaggio di notifica con un collegamento di accesso singolo e può quindi impostare un password dopo aver effettuato l'accesso usando quella. Qual è il modo migliore per ottenere qualcosa del genere?

Ho pensato forse di modificare il modulo per impostare i #default_valuecampi della password su una password casuale e quindi l'impostazione '#access' => FALSE, ma non sono sicuro che sia il modo migliore per farlo.

Risposte:


3

C'è un modulo che fa questo.

Dai un'occhiata a Genera password .

Presenta questa impostazione aggiuntiva in Configurazione »Persone» Impostazioni account :

Gli utenti possono inserire una password al momento della registrazione. Se lasciato vuoto, verrà generata una password casuale. Questo vale sempre quando un amministratore crea l'account.

Quindi, durante la creazione dell'account, lascia vuoto il campo della password, ma assicurati di selezionare anche questa casella di controllo nella pagina "Aggiungi utente":

Notifica all'utente un nuovo account

Il risultato di queste due impostazioni è che il modulo genera una password casuale quando l'amministratore crea un account e all'utente viene inviata un'e-mail con una notifica sull'account e viene richiesto di impostare una password nel collegamento di accesso singolo incluso nella notifica.

Se vuoi imparare come è fatto, leggi il codice sorgente.


2
Le prime righe di codice di questo modulo vengono utilizzate hook_init()per drupal_add_css()ogni caricamento di pagina ... è anche la duplicazione di core user_password(). Non supera il test dell'olfatto.
Garrett Albright,

Accetto, @GarrettAlbright - pensi che abbia senso migliorare (e semplificare) GenPass o creare un nuovo modulo ... o inserirlo in un modulo di esperienza di amministrazione esistente?
mlncn

Con quale frequenza deve farlo l'amministratore? Nel mio caso, è qualcosa del tipo: ogni due mesi. Questo significa che posso vivere con GenPass non ottimizzato. Se lo fai tutte le volte, potresti voler passare un po 'di tempo a migliorare GenPass o scrivere un modulo migliore.
Radical gratuito il

Non ricordo i dettagli, ma IIRC ho appena adottato l'approccio che menziono nel mio PO; nascondere il campo password e impostarne uno in modo casuale utilizzando user_password(mt_rand(10, 50))o qualcosa del genere al momento dell'invio del modulo.
Garrett Albright,

@FreeRadical se aggiunge CSS a ogni caricamento della pagina, sicuramente non importa quanto spesso usi la funzione - rallenterà ogni singola pagina che viene servita
AdamS

3

Se non ti va di installare il modulo "Genera password" e hai familiarità con gli hook, allora ecco un'alternativa:

/**
 * 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'];
  }
}

Potresti renderlo più sofisticato per i tuoi gusti. Allo stato attuale nasconde sempre il campo password e fornisce invece un valore: l'amministratore dovrà modificare il nuovo account per impostare un valore specifico. Inoltre, disattiva l'impostazione predefinita "notifica", mentre è preferibile attivarla.

Aggiornato secondo la risposta @joe_flash (ma in una forma leggermente più compatta): il campo password verrà espanso in due sottocampi ("pass1" e "pass2") quando l'elemento viene elaborato.


1

La risposta di AdamS è quasi arrivata . Poiché il campo password verrà espanso in due sottocampi ("pass1" e "pass2") quando l'elemento viene elaborato ( form_process_password_confirm()), è necessario qualcosa di simile:

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

Grazie ho aggiornato la mia risposta (e ti ho dato credito!). Si scopre che avevo già il codice funzionante sul mio server ma devo aver accidentalmente copiato una versione precedente nella risposta, mi dispiace.
AdamS,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.