Bisakah admin membuat akun baru tanpa kata sandi?


10

Ketika seorang admin membuat akun baru (admin / orang / buat), mereka diminta untuk memasukkan kata sandi untuk akun tersebut. Klien saya menginginkannya bahwa ketika sebuah akun dibuat di bagian belakang, admin tidak perlu memasukkan kata sandi, tetapi pengguna dikirim pesan pemberitahuan dengan satu kali masuk log-in dan kemudian dapat mengatur kata sandi setelah masuk menggunakan itu. Apa cara terbaik untuk mencapai sesuatu seperti ini?

Saya telah memikirkan mungkin mengubah formulir untuk mengatur #default_valuebidang kata sandi menjadi kata sandi acak dan kemudian menetapkan '#access' => FALSE, tetapi saya tidak yakin apakah itu cara terbaik untuk melakukannya.

Jawaban:


3

Ada modul yang melakukan ini.

Lihat Hasilkan Kata Sandi .

Ini memperkenalkan pengaturan tambahan ini di Konfigurasi »Orang» Pengaturan akun :

Pengguna dapat memasukkan kata sandi saat pendaftaran. Jika dibiarkan kosong, kata sandi acak akan dihasilkan. Ini selalu berlaku ketika administrator membuat akun.

Kemudian, saat membuat akun, biarkan bidang kata sandi kosong, tetapi pastikan Anda juga mencentang kotak ini pada halaman "Tambahkan pengguna":

Beri tahu pengguna akun baru

Hasil dari dua pengaturan ini adalah bahwa modul menghasilkan kata sandi acak ketika administrator membuat akun, dan pengguna dikirim email dengan pemberitahuan tentang akun dan diminta untuk mengatur kata sandi di tautan masuk satu kali yang disertakan dalam notifikasi.

Jika Anda ingin mempelajari cara melakukannya, baca kode sumber.


2
Baris pertama ini modul kode menggunakan hook_init()untuk drupal_add_css()setiap buka halaman ... itu juga duplikasi inti ini user_password(). Tidak lulus uji bau.
Garrett Albright

Setuju, @GarrettAlbright - pikir masuk akal untuk meningkatkan (dan menyederhanakan) GenPass atau membuat modul baru ... atau muat dalam modul pengalaman admin yang ada?
mlncn

Seberapa sering admin harus melakukan ini? Dalam kasus saya, itu adalah sesuatu seperti: Setiap bulan. Ini berarti saya bisa hidup dengan GenPass tidak super-dioptimalkan. Jika Anda melakukan ini sepanjang waktu, Anda mungkin ingin meluangkan waktu untuk memperbaiki GenPass atau menulis modul yang lebih baik.
Free Radical

Saya tidak dapat mengingat spesifiknya, tetapi IIRC saya hanya mengambil pendekatan yang saya sebutkan dalam OP saya; menyembunyikan bidang kata sandi dan hanya menetapkan satu menggunakan secara acak user_password(mt_rand(10, 50))atau sesuatu seperti itu pada saat pengiriman formulir.
Garrett Albright

@FreeRadical jika menambahkan CSS ke setiap halaman memuat, maka tentu tidak masalah seberapa sering Anda menggunakan fitur - itu akan memperlambat setiap halaman yang dilayani
AdamS

3

Jika Anda tidak suka memasang modul "Buat Kata Sandi" dan merasa nyaman menggunakan pengait, maka berikut ini alternatifnya:

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

Anda bisa membuatnya lebih canggih sesuai dengan selera Anda. Sebagaimana adanya, selalu menyembunyikan bidang kata sandi dan memberikan nilai sebagai gantinya - admin harus mengedit akun yang baru untuk menetapkan nilai tertentu. Ini juga membiarkan "notifikasi" defaultnya mati, sedangkan Anda mungkin lebih suka aktif.

Diperbarui sesuai jawaban @joe_flash (tetapi dalam bentuk yang sedikit lebih kompak): bidang kata sandi akan diperluas menjadi dua subbidang ("pass1" dan "pass2") ketika elemen diproses.


1

Jawaban AdamS hampir sampai. Karena bidang kata sandi akan diperluas menjadi dua subbidang ("pass1" dan "pass2") ketika elemen diproses ( form_process_password_confirm()), Anda memerlukan sesuatu seperti:

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

Terima kasih, saya telah memperbarui jawaban saya (dan memberi Anda kredit!) Ternyata saya sudah memiliki kode yang berfungsi di server saya tetapi pasti secara tidak sengaja menyalin versi yang lebih lama ke dalam jawabannya, maaf.
AdamS
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.