web-dev-qa-db-fra.com

Les administrateurs peuvent-ils créer de nouveaux comptes sans mot de passe?

Lorsqu'un administrateur crée un nouveau compte (admin/people/create), il est invité à entrer un mot de passe pour le compte. Mon client souhaite que lorsqu'un compte est créé à l'arrière-plan, l'administrateur n'ait pas à saisir de mot de passe, mais l'utilisateur reçoit un message de notification avec un lien de connexion unique et peut ensuite définir un mot de passe après la connexion en utilisant cela. Quelle est la meilleure façon de réaliser quelque chose comme ça?

J'ai pensé à peut-être modifier le formulaire pour définir le #default_value des champs de mot de passe sur un mot de passe aléatoire, puis définissez '#access' => FALSE, mais je ne sais pas si c'est la meilleure façon de procéder.

10
Garrett Albright

Si vous n'avez pas envie d'installer le module "Generate Password" et que vous êtes à l'aise avec les hooks, alors voici une 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'];
  }
}

Vous pourriez le rendre plus sophistiqué à votre goût. En l'état, il masque toujours le champ du mot de passe et fournit une valeur à la place - l'administrateur devra modifier le nouveau compte pour définir une valeur spécifique. En outre, il laisse la valeur par défaut "notifier" désactivée, alors que vous préférerez peut-être activée.

Mis à jour selon la réponse @joe_flash (mais sous une forme légèrement plus compacte): le champ du mot de passe sera développé en deux sous-champs ("pass1" et "pass2") lorsque l'élément est traité.

3
AdamS

Il y a un module qui fait ça.

Découvrez Générer le mot de passe .

Il introduit ce paramètre supplémentaire dans Configuration "Personnes" Paramètres du compte :

Les utilisateurs peuvent entrer un mot de passe lors de l'inscription. S'il est laissé vide, un mot de passe aléatoire sera généré. Cela s'applique toujours lorsqu'un administrateur crée le compte.

Ensuite, lors de la création du compte, laissez le champ de mot de passe vide, mais assurez-vous également de cocher cette case sur la page "Ajouter un utilisateur":

Informer l'utilisateur d'un nouveau compte

Le résultat de ces deux paramètres est que le module génère un mot de passe aléatoire lorsque l'administrateur crée un compte et que l'utilisateur reçoit un e-mail avec une notification sur le compte et est invité à définir un mot de passe dans le lien de connexion unique inclus. dans la notification.

Si vous voulez savoir comment cela se fait, lisez le code source.

3
Free Radical

La réponse d'AdamS est presque là. Étant donné que le champ de mot de passe sera développé en deux sous-champs ("pass1" et "pass2") lorsque l'élément est traité (form_process_password_confirm()), vous avez besoin de quelque chose comme:

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