Создайте пользователя программно и придайте им роль

Я создаю пользователя программно следующим образом:

$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(), он будет похож на роли .

Что я делаю неправильно?

43 голоса | спросил Nicola Peluchetti 13 J000000Wednesday11 2011, 17:08:22

5 ответов


42

Этот код работал для меня:

$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);
ответил Nebojsa 13 J000000Wednesday11 2011, 17:58:55
12

Это пример, который я нашел на сайте.

$account = new stdClass;
$account->is_new = TRUE;
$account->name = 'foo';
$account->pass = user_hash_password('bar');
$account->mail = '[email protected]';
$account->init = '[email protected]';
$account->status = TRUE;
$account->roles = array(DRUPAL_AUTHENTICATED_RID => TRUE);
$account->timezone = variable_get('date_default_timezone', '');
user_save($account);
ответил SMTF 17 PMpTue, 17 Apr 2012 23:52:44 +040052Tuesday 2012, 23:52:44
12

Чтобы программно создать пользователя с ролями и настраиваемыми значениями полей (например, Имя и Фамилия), вы можете использовать следующий код:

$new_user = array(
  'name' => 'xgramp',
  'pass' => 'idontwantnoonebutyoutoloveme',
  'mail' => '[email protected]',
  '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

ответил batigolix 7 +04002013-10-07T14:35:52+04:00312013bEurope/MoscowMon, 07 Oct 2013 14:35:52 +0400 2013, 14:35:52
1

Чтобы создать пользователя программно с адреса электронной почты, попробуйте следующее:

// 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));
}
ответил tyler.frankenstein 9 FebruaryEurope/MoscowbMon, 09 Feb 2015 18:04:42 +0300000000pmMon, 09 Feb 2015 18:04:42 +030015 2015, 18:04:42
0

Чтобы создать пользователя программно:

$newUser = array(
      'name' => 'theUserName,
      'pass' => 'thePassWord',
      'mail' => '[email protected]',
      'status' => 1,
      'roles' => array(DRUPAL_AUTHENTICATED_RID => 'authenticated user'),
      'init' =>  '[email protected]',
  );
user_save(null, $newUser);
ответил houmem 3 TueEurope/Moscow2013-12-03T22:59:06+04:00Europe/Moscow12bEurope/MoscowTue, 03 Dec 2013 22:59:06 +0400 2013, 22:59:06

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132