¿Pueden los administradores crear nuevas cuentas sin contraseñas?

10

Cuando un administrador crea una nueva cuenta (admin / people / create), se le solicita que ingrese una contraseña para la cuenta. Mi cliente quiere que sea cuando se crea una cuenta en el back-end, el administrador no tiene que ingresar una contraseña, pero al usuario se le envía un mensaje de notificación con un enlace de inicio de sesión único y luego puede establecer un contraseña después de iniciar sesión con eso. ¿Cuál es la mejor manera de lograr algo como esto?

He pensado en alterar el formulario para configurar los #default_valuecampos de contraseña en una contraseña aleatoria y luego configurarlo '#access' => FALSE, pero no estoy seguro de si esa es la mejor manera de hacerlo.

Garrett Albright
fuente

Respuestas:

3

Hay un módulo que hace esto.

Echa un vistazo a Generar contraseña .

Introduce esta configuración adicional en Configuración »Personas» Configuración de la cuenta :

Los usuarios pueden ingresar una contraseña en el registro. Si se deja vacío, se generará una contraseña aleatoria. Esto siempre se aplica cuando un administrador crea la cuenta.

Luego, al crear la cuenta, deje el campo de contraseña vacío, pero asegúrese de marcar también esta casilla en la página "Agregar usuario":

Notificar al usuario de la nueva cuenta

El resultado de estas dos configuraciones es que el módulo genera una contraseña aleatoria cuando el administrador crea una cuenta, y al usuario se le envía un correo electrónico con una notificación sobre la cuenta y se le solicita que establezca una contraseña en el enlace de inicio de sesión único que se incluye en la notificación

Si quieres aprender cómo se hace, lee el código fuente.

Radicales libres
fuente
2
Primeras líneas de código de este módulo están utilizando hook_init()para drupal_add_css()en cada carga de la página ... también es la duplicación del núcleo user_password(). No pasa la prueba de olor.
Garrett Albright
De acuerdo, @GarrettAlbright: ¿cree que tiene sentido mejorar (y simplificar) GenPass o crear un nuevo módulo ... o adaptarlo a un módulo de experiencia de administrador existente?
mlncn
¿Con qué frecuencia tiene que hacer esto el administrador? En mi caso, es algo así como: Cada dos meses. Esto significa que puedo vivir con GenPass sin estar súper optimizado. Si está haciendo esto todo el tiempo, es posible que desee pasar un tiempo mejorando GenPass o escribiendo un módulo mejor.
Radical libre
No puedo recordar los detalles, pero IIRC acabo de tomar el enfoque que menciono en mi OP; ocultando el campo de contraseña y simplemente configurando uno al azar usando user_password(mt_rand(10, 50))o algo así al enviar el formulario.
Garrett Albright
@FreeRadical si está agregando CSS a cada carga de página, entonces seguramente no importa qué tan seguido use la función: ralentizará cada página que se sirve
AdamS
3

Si no desea instalar el módulo "Generar contraseña" y se siente cómodo usando ganchos, entonces esta es una 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'];
  }
}

Podrías hacerlo más sofisticado a tu gusto. Tal como está, siempre oculta el campo de contraseña y proporciona un valor en su lugar: el administrador tendrá que editar la nueva cuenta para establecer un valor específico. También deja el valor predeterminado "notificar" en desactivado, mientras que puede preferir activarlo.

Actualizado según la respuesta @joe_flash (pero en una forma un poco más compacta): el campo de contraseña se expandirá en dos subcampos ("pass1" y "pass2") cuando se procese el elemento.

AdamS
fuente
1

La respuesta de AdamS casi está ahí. Dado que el campo de contraseña se expandirá en dos subcampos ("pass1" y "pass2") cuando se procese el elemento ( form_process_password_confirm()), necesita algo como:

/**
 * 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;
  }
}
joe_flash
fuente
Gracias. He actualizado mi respuesta (¡y le he dado crédito!). Resulta que ya tenía el código de trabajo en mi servidor pero debí haber copiado accidentalmente una versión anterior en la respuesta, lo siento.
AdamS