उपयोगकर्ता को प्रोग्रामेटिक रूप से बनाएं और उन्हें एक भूमिका दें


46

मैं इस तरह से एक उपयोगकर्ता प्रोग्राम बना रहा हूँ:

$newUser = array(
  'name' => $mail, 
  'pass' => 'password',  // note: do not md5 the password
  'mail' => $mail, 
  'status' => 1, 
  'init' => $mail,
  'roles' => array(5)
);
$user = user_save(null, $newUser);

मुझे पांच के बराबर रोल आईडी के साथ भूमिका मिली है; जब मैं उपयोगकर्ता बनाता हूं, तो "users_roles" तालिका में रोल आईडी के लिए मान 0 के साथ केवल एक पंक्ति होती है, लेकिन अगर मैं उपयोगकर्ता ऑब्जेक्ट को प्रिंट करता हूं var_dump(), तो ऐसा लगता है कि भूमिकाएं बनाई गई हैं।

मैं क्या गलत कर रहा हूं?


यह केवल मूल्य पर सत्यता की जांच करता है, कुंजी वह है जो मायने रखती है। array($role_id => 'anything')
रायसिंब्रांच क्रंच

जवाबों:


46

इस कोड ने मेरे लिए काम किया:

$new_user = array(
  'name' => $name,
  'pass' => $sifra, // note: do not md5 the password
  'mail' => $email,
  'status' => 1,
  'init' => $email,
  'roles' => array(
    DRUPAL_AUTHENTICATED_RID => 'authenticated user',
    3 => 'custom role',
  ),
);

// The first parameter is sent blank so a new user is created.
user_save('', $new_user);

क्या मुझे पासवर्ड "abc12345" जैसा पासवर्ड लिखना चाहिए और user_save () md5 में बदल जाएगा?
20

1
user_saveइसका ध्यान
रखेंगे

जब तक पासवर्ड user_save()दूसरे तर्क में है, तब तक यह हैशेड हो जाएगा। यदि आप तर्क के user_save($account)बिना करते $editहैं, तो md5 रूपांतरण नहीं होता है। नीचे @SMTF द्वारा दिया गया उत्तर इसे प्रदर्शित करता है।
एलेक

धन्यवाद मेरा दिन बच गया
ऋषभ

13

यह एक उदाहरण है जो मुझे एक साइट पर मिला है।

$account = new stdClass;
$account->is_new = TRUE;
$account->name = 'foo';
$account->pass = user_hash_password('bar');
$account->mail = 'foo@example.com';
$account->init = 'foo@example.com';
$account->status = TRUE;
$account->roles = array(DRUPAL_AUTHENTICATED_RID => TRUE);
$account->timezone = variable_get('date_default_timezone', '');
user_save($account);

क्षमा करें, मुझे लगता है कि DRUPAL_AUTHENTICATED_RID => TRUE गलत लगता है, और मुझे नहीं लगता कि user_hash_password की आवश्यकता है।
स्टेफोसोसेलिन

user_hash_password('bar');गलत है
जोएल जेम्स

कुछ ऐसे उदाहरण हैं जहां user_save()उन्हें सहेजने से पहले पासवर्डों को हैश करने में विफल रहता है (मैं अपने अनुभव में और मुझे लगता है कि वेब के आसपास अन्य लोग भी इसे कभी-कभी अनुभव कर रहे हैं)। मुझे पता नहीं क्यों (लेकिन मैं चाहूंगा!)। इन मामलों में कॉलिंग user_hash_password()आवश्यक प्रतीत होती है।
alec

इस जवाब में कोड है की आवश्यकता होती है user_hash_password()मैन्युअल रूप से कहा जाता है। यह इसलिए है क्योंकि यह $editकरने के लिए पारित नहीं है user_save()। यदि कोड शामिल है $edit = array('pass' => 'bar');(जो कि यह उत्तर नहीं है) तो करने के बजाय $account->pass = user_hash...आप कर सकते हैं user_save($account, $edit);और user_save()आपके लिए हैशिंग करेंगे।
एलेक

13

प्रोग्राम को भूमिकाओं और कस्टम फ़ील्ड मानों के साथ बनाने के लिए (जैसे पहले नाम और अंतिम नाम) आप निम्न कोड का उपयोग कर सकते हैं:

$new_user = array(
  'name' => 'xgramp',
  'pass' => 'idontwantnoonebutyoutoloveme',
  'mail' => 'xgparsons@flyingburritobrothers.la',
  'signature_format' => 'full_html',
  'status' => 1,
  'language' => 'en',
  'timezone' => 'America/Los_Angeles',
  'init' => 'Email',
  'roles' => array(
    DRUPAL_AUTHENTICATED_RID => 'authenticated user',
    6 => 'member', // role id for custom roles varies per website
  ),
  'field_first_name' => array(
    'und' => array(
      0 => array(
        'value' => 'Gram',
      ),
    ),
  ),
  'field_last_name' => array(
    'und' => array(
      0 => array(
        'value' => 'Parsons',
      ),
    ),
  ),
);

$account = user_save(NULL, $new_user);

अधिक जानकारी के लिए इस ब्लॉग पोस्ट और टिप्पणियों को देखें: http://codekarate.com/blog/create-user-account-drupal-7-programmatically


आप भूमिकाओं पर एक कोष्ठक से चूक गए
सीन

2

ई-मेल पते से प्रोग्रामेटिक रूप से उपयोगकर्ता बनाने के लिए, यह प्रयास करें:

// Use the e-mail address prefix as a user name.
$name = substr($mail, 0, strpos($mail, '@'));

// Make sure the user name isn't already taken.
$query = db_select('users', 'u')
  ->fields('u', array('uid'))
  ->condition('u.name', $name)
  ->execute();
$result = $query->fetch();

// If the user name is taken, append a random string to the end of it.
if ($result->uid) { $name .= '-' . user_password(); }

// Build the user account object and then save it.
$account = new stdClass();
$account->name = $name;
$account->mail = $mail;
$account->init = $mail;
$account->pass = user_password();
$account->status = 1;
user_save($account);
if ($account->uid) {
  drupal_set_message('Created new user with id %uid', array('%uid' => $account->uid));
}

0

प्रोग्रामेटिक रूप से उपयोगकर्ता बनाने के लिए:

$newUser = array(
      'name' => 'theUserName,
      'pass' => 'thePassWord',
      'mail' => 'the@mail.com',
      'status' => 1,
      'roles' => array(DRUPAL_AUTHENTICATED_RID => 'authenticated user'),
      'init' =>  'the@mail.com',
  );
user_save(null, $newUser);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.