Yöneticiler şifresiz yeni hesaplar oluşturabilir mi?


10

Bir yönetici yeni bir hesap oluşturduğunda (admin / people / create), hesap için bir parola girmeleri istenir. Müşterim, arka uçta bir hesap oluşturulduğunda yöneticinin bir şifre girmesi gerekmemesini istiyor, ancak kullanıcıya bir kerelik giriş bağlantısı içeren bir bildirim mesajı gönderiliyor ve ardından bir kullanarak giriş yaptıktan sonra şifre. Böyle bir şey elde etmenin en iyi yolu nedir?

Belki #default_valuerasgele bir şifre için şifre alanlarını ayarlamak için formu değiştirmek ve sonra ayar '#access' => FALSEdüşündüm, ama bu konuda gitmek için en iyi yolu olup olmadığından emin değilim.

Yanıtlar:


3

Bunu yapan bir modül var.

Şifre Oluştur'a göz atın .

Bu ek ayarı Yapılandırma »Kişiler» Hesap ayarlarında tanıtır :

Kullanıcılar kayıt sırasında bir şifre girebilir. Boş bırakılırsa, rastgele bir şifre oluşturulur. Bu, her zaman bir yönetici hesabı oluştururken geçerlidir.

Ardından, hesabı oluştururken şifre alanını boş bırakın, ancak "Kullanıcı ekle" sayfasındaki bu onay kutusunu da işaretlediğinizden emin olun:

Kullanıcıyı yeni hesap hakkında bilgilendir

Bu iki ayarın sonucu, yönetici bir hesap oluşturduğunda modülün rasgele bir parola oluşturması ve kullanıcıya hesapla ilgili bildirim içeren bir e-posta gönderilmesi ve dahil olan bir kerelik giriş bağlantısında bir parola ayarlaması istenmesidir. bildirim.

Nasıl yapıldığını öğrenmek istiyorsanız kaynak kodunu okuyun.


2
Bu kod modülün ilk satırları kullanıyor hook_init()için drupal_add_css()her sayfa yüklemesinde ... o da çekirdek 's çoğaltarak ediyor user_password(). Koku testini geçmez.
Garrett Albright

Katılıyorum, @GarrettAlbright - GenPass'ı geliştirmenin (ve basitleştirmenin) veya yeni bir modül oluşturmanın ya da mevcut bir yönetici deneyimi modülüne sığmasının mantıklı olduğunu mu düşünüyorsunuz?
mlncn

Yönetici bunu ne sıklıkta yapmak zorunda? Benim durumumda, bu şöyle: Her iki ayda bir. Bu, GenPass'ın süper optimize edilmeden yaşayabileceği anlamına geliyor. Bunu her zaman yapıyorsanız, GenPass'ı geliştirmek veya daha iyi bir modül yazmak için biraz zaman harcamak isteyebilirsiniz.
Serbest Radikal

Özellikleri hatırlayamıyorum, ama IIRC OP'mde bahsettiğim yaklaşımı aldım; parola alanını gizlemek ve user_password(mt_rand(10, 50))form gönderimi sırasında rastgele birini veya benzeri bir şeyi ayarlamak .
Garrett Albright

@FreeRadical, her sayfa yüküne CSS ekliyorsa, özelliği ne kadar kullandığınız önemli değildir - sunulan her sayfayı yavaşlatır
AdamS

3

"Şifre Oluştur" modülünü kurmaktan hoşlanmıyorsanız ve kancaları kullanmaktan çekiniyorsanız, işte size bir alternatif:

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

Zevkinize daha sofistike hale getirebilirsiniz. Durduğu için her zaman şifre alanını gizler ve bunun yerine bir değer sağlar - yöneticinin belirli bir değeri ayarlamak için yeni hesabı düzenlemesi gerekir. Ayrıca, "bildirim" varsayılanını kapalı bırakır, oysa tercih edebilirsiniz.

@ Joe_flash yanıtına göre güncellenir (ancak biraz daha kompakt bir biçimde): öğe işlendiğinde parola alanı iki alt alana ("pass1" ve "pass2") genişletilir.


1

AdamS'ın yanıtı neredeyse orada. Öğe işlendiğinde ( form_process_password_confirm()) parola alanı iki alt alana ("pass1" ve "pass2") genişletileceğinden , aşağıdakine benzer bir şeye ihtiyacınız vardır:

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

Teşekkürler Cevabımı güncelledim (ve size kredi verdi!). Sunucumda zaten çalışma koduna sahip olduğumu, ancak yanlışlıkla eski bir sürümü cevaba kopyalamış olmalıyım, üzgünüm.
AdamS
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.