क्या पासवर्ड के बिना नए खाते बना सकते हैं?


10

जब कोई व्यवस्थापक एक नया खाता बनाता है (व्यवस्थापक / लोग / बनाते हैं), तो वे खाते के लिए एक पासवर्ड दर्ज करने के लिए प्रेरित होते हैं। मेरा मुवक्किल यह चाहता है कि जब कोई खाता अंतिम छोर पर बना हो, तो व्यवस्थापक को पासवर्ड दर्ज करने की आवश्यकता नहीं है, लेकिन उपयोगकर्ता को एक बार लॉग-इन लिंक के साथ एक अधिसूचना संदेश भेजा जाता है और फिर इसे सेट किया जा सकता है उस का उपयोग करने में लॉग इन करने के बाद पासवर्ड। इस तरह से कुछ हासिल करने का सबसे अच्छा तरीका क्या है?

मैंने शायद #default_valueपासवर्ड फ़ील्ड को यादृच्छिक पासवर्ड पर सेट करने और फिर सेटिंग करने के लिए फ़ॉर्म को बदलने के बारे में सोचा है '#access' => FALSE, लेकिन मुझे यकीन नहीं है कि इसके बारे में जाने का सबसे अच्छा तरीका है।

जवाबों:


3

एक मॉड्यूल है जो ऐसा करता है।

जनरेट पासवर्ड की जाँच करें

यह कॉन्फ़िगरेशन »लोगों» खाता सेटिंग्स में इस अतिरिक्त सेटिंग का परिचय देता है :

उपयोगकर्ता पंजीकरण पर एक पासवर्ड दर्ज कर सकते हैं। यदि खाली छोड़ दिया जाता है, तो एक यादृच्छिक पासवर्ड उत्पन्न होगा। यह हमेशा तब लागू होता है जब कोई व्यवस्थापक खाता बना रहा होता है।

फिर, खाता बनाते समय, पासवर्ड फ़ील्ड को खाली छोड़ दें, लेकिन सुनिश्चित करें कि आप "उपयोगकर्ता जोड़ें" पृष्ठ पर इस चेकबॉक्स को भी जांचें:

नए खाते के उपयोगकर्ता को सूचित करें

इन दो सेटिंग्स का नतीजा यह है कि मॉड्यूल व्यवस्थापक द्वारा खाता बनाते समय एक यादृच्छिक पासवर्ड उत्पन्न करता है, और उपयोगकर्ता को खाते के बारे में एक अधिसूचना के साथ एक ईमेल भेजा जाता है और एक बार लॉगिन लिंक में एक पासवर्ड सेट करने के लिए प्रेरित किया जाता है, जिसमें शामिल है अधिसूचना में।

यदि आप सीखना चाहते हैं कि यह कैसे किया जाता है, तो स्रोत कोड पढ़ें।


2
इस मॉड्यूल के कोड के पहले लाइनों का उपयोग कर रहे hook_init()करने के लिए drupal_add_css()हर पृष्ठ लोड पर ... यह भी कोर के डुप्लिकेट है user_password()। गंध परीक्षण पास नहीं करता है।
गैरेट अलब्राइट

सहमत हैं, @GarrettAlbright - लगता है कि यह बेहतर बनाता है (और सरल) GenPass या एक नया मॉड्यूल बना ... या इसे किसी मौजूदा व्यवस्थापक अनुभव मॉड्यूल में फिट कर सकता है?
mlncn

व्यवस्थापक को ऐसा करने के लिए कितनी बार करना होगा? मेरे मामले में, यह कुछ ऐसा है: हर दूसरे महीने। इसका मतलब है कि मैं जेनपास को सुपर-ऑप्टिमाइज़ नहीं कर सकता। यदि आप हर समय ऐसा कर रहे हैं, तो आप कुछ समय जेनपास में सुधार या एक बेहतर मॉड्यूल लिखना चाह सकते हैं।
फ्री रेडिकल

मैं बारीकियों को याद नहीं कर सकता, लेकिन IIRC मैंने सिर्फ अपने ओपी में उल्लिखित दृष्टिकोण लिया; पासवर्ड फ़ील्ड को छुपाना और user_password(mt_rand(10, 50))फॉर्म जमा करने पर बस एक बेतरतीब ढंग से उपयोग करना या ऐसा कुछ सेट करना।
गैरेट एलब्राइट

@ नि: शुल्क अगर यह हर पेज लोड करने के लिए सीएसएस जोड़ रहा है, तो निश्चित रूप से यह कोई फर्क नहीं पड़ता कि आप किस तरह से सुविधा का उपयोग करते हैं - यह हर एक पृष्ठ को धीमा कर देगा जो परोसा जाता है
एडम्स

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 उत्तर (लेकिन थोड़े अधिक कॉम्पैक्ट रूप में) के अनुसार अपडेट किया गया: तत्व के संसाधित होने पर पासवर्ड फ़ील्ड को दो सबफ़ील्ड ("पास 1" और "पास 2") में विस्तारित किया जाएगा।


1

आदम का जवाब लगभग वहीं है। चूंकि पासवर्ड फ़ील्ड को दो सबफील्ड्स ("पास 1" और "पास 2") में विस्तारित किया जाएगा, जब तत्व संसाधित होता है ( 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;
  }
}

धन्यवाद मैंने अपना उत्तर अपडेट किया है (और आपको क्रेडिट दिया है!)। यह पता चला है कि मेरे पास पहले से ही अपने सर्वर पर काम करने वाला कोड था, लेकिन गलती से उत्तर में एक पुराने संस्करण को कॉपी कर लिया होगा, क्षमा करें।
19
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.