उपयोगकर्ताओं को कोड में पासवर्ड सेट करें?


9

मैं कोड में एक उपयोगकर्ता पासवर्ड बदलने में सक्षम होना चाहता हूं।

चूंकि user_loadकोई वस्तु वापस करता है, और user_saveएक सरणी चाहता है, यह गैर-तुच्छ है।

मुझे लगता है कि किसी ने यह करने के लिए एक त्वरित और आसान तरीका समझ लिया है।


मेरा वर्तमान समाधान जैसा दिखता है:

db_update('users')
  ->fields(array('pass' => user_hash_password('some_password')))
  ->condition('uid', 1)
  ->execute();

लेकिन मुझे यह पसंद नहीं है कि यह ज्यादातर हुक को बायपास करे।

जवाबों:


19

आपको बस user_save()निम्नलिखित के समान कोड का उपयोग करके कॉल करना होगा।

$edit['pass'] = 'New password';
user_save($account, $edit);

$accountउपयोगकर्ता खाते में परिवर्तन के लिए उपयोगकर्ता ऑब्जेक्ट शामिल है। मैं आपको इसका उपयोग करके लोड करता हूं user_load(), लेकिन यह वर्तमान में लॉग इन उपयोगकर्ता के लिए उपयोगकर्ता ऑब्जेक्ट भी हो सकता है। बाद के मामले में, ड्रुपल निम्न कोड ( user_save () ) का उपयोग करके सत्र को फिर से तैयार करेगा ।

  // If the password changed, delete all open sessions and recreate
  // the current one.
  if ($account->pass != $account->original->pass) {
    drupal_session_destroy_uid($account->uid);
    if ($account->uid == $GLOBALS['user']->uid) {
      drupal_session_regenerate();
    }
  }

इसमें पासवर्ड $edit['pass']सादा पासवर्ड है। user_save()निम्न कोड (फ़ंक्शन की शुरुआत में) का उपयोग करके इसे अपने हैश के साथ बदल देगा।

if (!empty($edit['pass'])) {
  // Allow alternate password hashing schemes.
  require_once DRUPAL_ROOT . '/' . variable_get('password_inc', 'includes/password.inc');
  $edit['pass'] = user_hash_password(trim($edit['pass']));
  // Abort if the hashing failed and returned FALSE.
  if (!$edit['pass']) {
    return FALSE;
  }
}

विकल्प के रूप में, आप drupal_submit_form () का उपयोग कर सकते हैं ।

$form_state = array();
$form_state['user'] = $account;
$form_state['values']['pass']['pass1'] = 'New password';
$form_state['values']['pass']['pass2'] = 'New password';
$form_state['values']['op'] = t('Save');
drupal_form_submit('user_profile_form', $form_state);

इस तरह, यदि आपके पास कोई मॉड्यूल है, उदाहरण के लिए, पासवर्ड को मान्य करता है, तो इसका कोड निष्पादित किया जाएगा, और आपको form_get_errors () से कोई त्रुटि कोड प्राप्त होगा ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.