Я создаю пользователя программно следующим образом:
$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')
Ответы:
Этот код работал для меня:
источник
user_save
позаботится об этомuser_save()
втором аргументе, он будет хешироваться. Если вы обойдетесьuser_save($account)
без$edit
аргумента, конвертация md5 не произойдет. Ответ @SMTF ниже демонстрирует это.Это пример, который я нашел на сайте.
источник
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()
сделает хэширования для вас.Чтобы программно создать пользователя с ролями и значениями настраиваемых полей (например, «Имя» и «Фамилия»), вы можете использовать следующий код:
Смотрите этот пост в блоге и комментарии для более подробной информации: http://codekarate.com/blog/create-user-account-drupal-7-programmatics
источник
Чтобы создать пользователя программно с адреса электронной почты, попробуйте это:
источник
Чтобы создать пользователя программно:
источник