Чи можуть адміністратори створювати нові облікові записи без паролів?


10

Коли адміністратор створює новий обліковий запис (admin / people / create), їм буде запропоновано ввести пароль для облікового запису. Мій клієнт хоче, щоб при створенні облікового запису на зворотному кінці адміністратору не потрібно було вводити пароль, але користувачеві надсилається повідомлення з одноразовим посиланням для входу, а потім він може встановити пароль після входу за допомогою цього. Який найкращий спосіб досягти чогось подібного?

Я думав, можливо, змінити форму, щоб встановити #default_valueполя паролів на випадковий пароль, а потім встановити '#access' => FALSE, але я не впевнений, чи це найкращий спосіб зробити це.

Відповіді:


3

Є модуль, який робить це.

Перевірте Створити пароль .

Це вводить це додаткове налаштування в Конфігурація »Люди» Налаштування облікового запису :

Користувачі можуть ввести пароль при реєстрації. Якщо залишити порожнім, генерується випадковий пароль. Це завжди застосовується, коли адміністратор створює обліковий запис.

Потім, створюючи обліковий запис, залиште поле паролем порожнім, але переконайтеся, що ви також встановите цей прапорець на сторінці "Додати користувача":

Повідомте користувача нового акаунта

Результатом цих двох налаштувань є те, що модуль генерує випадковий пароль, коли адміністратор створює обліковий запис, а користувачеві надсилається електронний лист із повідомленням про обліковий запис та пропонується встановити пароль у посиланні на одноразовий вхід, який включений. у повідомленні.

Якщо ви хочете дізнатися, як це робиться, прочитайте вихідний код.


2
Перші рядки коду цього модуля використовуються hook_init()для drupal_add_css()завантаження кожної сторінки ... він також дублює основні user_password(). Не проходить тест на запах.
Гаррет Олбрайт

Погодьтеся, @GarrettAlbright - ви думаєте, чи є сенс вдосконалити (і спростити) GenPass або зробити новий модуль ... або помістити його у існуючий модуль досвіду роботи адміністратора?
mlncn

Як часто адміністратору доводиться це робити? У моєму випадку це щось на кшталт: Кожен другий місяць. Це означає, що я можу жити, коли GenPass не надто оптимізований. Якщо ви робите це постійно, можливо, вам доведеться витратити деякий час на вдосконалення GenPass або написання кращого модуля.
Безкоштовний радикальний

Я не можу згадати специфіку, але IIRC я ​​просто взяв підхід, про який я згадував у своїй ОП; приховування поля пароля та просто встановлення одного випадкового використання user_password(mt_rand(10, 50))або чогось подібного при поданні форми.
Гаррет Олбрайт

@FreeRadical, якщо він додає CSS до кожного завантаження сторінки, то, звичайно, не важливо, наскільки часто ви використовуєте цю функцію - це сповільнить кожну окрему сторінку, яку ви отримуєте,
AdamS

3

Якщо ви не любите встановлювати модуль "Створити пароль" і вам зручно користуватися гачками, то ось альтернатива:

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

Ви можете зробити це більш витонченим на ваш смак. Окрім цього, він завжди приховує поле пароля і натомість надає значення - адміністратору доведеться редагувати новий обліковий запис, щоб встановити певне значення. Крім того, він залишає "сповіщення" за замовчуванням вимкнено, тоді як ви можете скористатися.

Оновлено відповідно до відповіді @joe_flash (але у трохи більш компактній формі): поле пароля буде розширено на два підполі ("pass1" та "pass2") при обробці елемента.


1

Відповідь Адама майже є. Оскільки поле пароля буде розширено на два підполі ("pass1" та "pass2") при обробці елемента ( form_process_password_confirm()), вам потрібно щось на зразок:

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

Дякую, я оновив свою відповідь (і надаю вам кредит!). Виявляється, я вже мав робочий код на своєму сервері, але, мабуть, випадково скопіював у відповідь старішу версію, вибачте.
AdamS
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.