ผู้ดูแลระบบสามารถสร้างบัญชีใหม่โดยไม่มีรหัสผ่านได้หรือไม่


10

เมื่อผู้ดูแลระบบสร้างบัญชีใหม่ (ผู้ดูแลระบบ / คน / สร้าง) พวกเขาจะได้รับแจ้งให้ป้อนรหัสผ่านสำหรับบัญชี ลูกค้าของฉันต้องการให้เป็นเมื่อบัญชีถูกสร้างขึ้นในส่วนหลังผู้ดูแลระบบไม่จำเป็นต้องป้อนรหัสผ่าน แต่ผู้ใช้จะได้รับข้อความแจ้งเตือนพร้อมลิงก์เข้าสู่ระบบแบบใช้ครั้งเดียวและจากนั้นสามารถตั้งค่า รหัสผ่านหลังจากเข้าสู่ระบบโดยใช้ที่ วิธีที่ดีที่สุดในการบรรลุสิ่งเช่นนี้คืออะไร?

ฉันคิดว่าอาจจะเปลี่ยนแบบฟอร์มเพื่อตั้งค่า#default_valueฟิลด์รหัสผ่านเป็นรหัสผ่านแบบสุ่มจากนั้นตั้งค่า'#access' => FALSEแต่ฉันไม่แน่ใจว่าเป็นวิธีที่ดีที่สุดในการดำเนินการหรือไม่

คำตอบ:


3

มีโมดูลที่ทำสิ่งนี้

ตรวจสอบการสร้างรหัสผ่าน

แนะนำการตั้งค่าเพิ่มเติมนี้ในการกำหนดค่า»ผู้คน»การตั้งค่าบัญชี :

ผู้ใช้สามารถป้อนรหัสผ่านเมื่อลงทะเบียน หากปล่อยว่างรหัสผ่านแบบสุ่มจะถูกสร้างขึ้น สิ่งนี้จะใช้เมื่อผู้ดูแลระบบกำลังสร้างบัญชี

จากนั้นเมื่อสร้างบัญชีให้ปล่อยฟิลด์รหัสผ่านว่างเปล่า แต่ให้แน่ใจว่าคุณทำเครื่องหมายในช่องทำเครื่องหมายนี้ในหน้า "เพิ่มผู้ใช้":

แจ้งผู้ใช้บัญชีใหม่

ผลลัพธ์ของการตั้งค่าทั้งสองนี้คือโมดูลจะสร้างรหัสผ่านแบบสุ่มเมื่อผู้ดูแลระบบสร้างบัญชีและผู้ใช้จะได้รับอีเมลแจ้งเตือนเกี่ยวกับบัญชีและแจ้งให้ตั้งรหัสผ่านในลิงค์ล็อกอินแบบครั้งเดียวที่รวมอยู่ ในการแจ้งเตือน

หากคุณต้องการเรียนรู้วิธีการทำงานให้อ่านซอร์สโค้ด


2
ของโมดูลนี้บรรทัดแรกของรหัสที่ใช้hook_init()ไปdrupal_add_css()ในการโหลดหน้าทุก ... user_password()ก็ยังทำซ้ำของหลัก ไม่ผ่านการทดสอบกลิ่น
Garrett Albright

เห็นด้วย, @GarrettAlbright - คิดว่ามันสมเหตุสมผลที่จะปรับปรุง (และทำให้ง่ายขึ้น) GenPass หรือสร้างโมดูลใหม่ ... หรือทำให้พอดีในโมดูลประสบการณ์ผู้ดูแลระบบที่มีอยู่?
mlncn

ผู้ดูแลระบบต้องทำเช่นนี้บ่อยเพียงใด? ในกรณีของฉันมันเป็นสิ่งที่ชอบ: ทุก ๆ เดือน นี่หมายความว่าฉันสามารถใช้ชีวิตกับ GenPass ที่ไม่ได้รับการปรับปรุงให้ดีที่สุด หากคุณทำเช่นนี้ตลอดเวลาคุณอาจต้องการใช้เวลาปรับปรุง GenPass หรือเขียนโมดูลที่ดีขึ้น
ฟรี Radical

ฉันจำข้อผิดพลาดไม่ได้ แต่ IIRC ฉันเพิ่งใช้วิธีที่ฉันพูดถึงใน OP ของฉัน ซ่อนฟิลด์รหัสผ่านและเพียงตั้งค่าแบบสุ่มโดยใช้user_password(mt_rand(10, 50))หรืออะไรทำนองนั้นเมื่อส่งแบบฟอร์ม
Garrett Albright

@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

คำตอบของ AdamS เกือบจะอยู่ที่นั่นแล้ว เนื่องจากฟิลด์รหัสผ่านจะถูกขยายออกเป็นสองฟิลด์ย่อย ("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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.