প্রোগ্রামগতভাবে একটি ব্যবহারকারী তৈরি করুন এবং তাদের একটি ভূমিকা দিন


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" এর মতো একটি পাসওয়ার্ড লিখতে এবং ব্যবহারকারীর_সেভ () এমডি 5 তে রূপান্তরিত করব?
xstean

1
user_saveএটির যত্ন নেবে
গুলোক

পাসওয়ার্ডটি যতক্ষণ না user_save()দ্বিতীয় যুক্তিতে থাকবে ততক্ষণ তা হ্যাশ হয়ে যাবে। আপনি যদি তর্ক user_save($account)ছাড়াই করেন $edit, তবে এমডি 5 রূপান্তর ঘটে না। নীচে @ এসএমটিএফ এর উত্তর এটি দেখায়।
এলেক

ধন্যবাদ আমার দিন বাঁচিয়েছে
রিশাব

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 => সত্যকে ভুল মনে হচ্ছে, এবং আমি মনে করি না যে ব্যবহারকারী_হ্যাশ_প্যাসওয়ার্ডের প্রয়োজন।
স্টেফগোসেলিন

user_hash_password('bar');ভুল
জোয়েল জেমস

কিছু উদাহরণ রয়েছে যেখানে user_save()পাসওয়ার্ডগুলি সংরক্ষণ করার আগে হ্যাশ পাসওয়ার্ডগুলিতে ব্যর্থ হয় (আমার নিজের অভিজ্ঞতায় এবং আমি ওয়েবে আশেপাশের অন্যদেরও মাঝে মাঝে এটি অভিজ্ঞতা করে দেখি)। কেন জানি না (তবে আমি চাই!)। এই ক্ষেত্রে কল করা user_hash_password()প্রয়োজনীয় বলে মনে হচ্ছে।
এলেক

এই উত্তরের কোডটির জন্য 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);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.