프로그래밍 방식으로 사용자를 만들고 역할을 부여하십시오.


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);

역할 ID가 5 인 역할이 있습니다. 사용자를 만들 때 "users_roles"테이블에는 역할 ID의 값이 0 인 행만 있지만 사용자 개체를로 인쇄 var_dump()하면 역할이 생성 된 것처럼 보입니다.

내가 무엇을 잘못하고 있지?


그것은 가치에 대한 진실성 만 검사합니다. 핵심은 중요한 것입니다. array($role_id => 'anything')
RaisinBranCrunch

답변:


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로 변환해야합니까?
xstean

1
user_save그것을 돌볼 것입니다
Gulok

비밀번호가 user_save()의 두 번째 인수에있는 한 해시됩니다. 인수 user_save($account)없이 수행하면 $editmd5 변환이 발생하지 않습니다. 아래 @SMTF의 답변이 이것을 보여줍니다.
alec

감사합니다 내 하루를 구했습니다
오전

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가 필요하지 않다고 생각합니다.
stefgosselin

user_hash_password('bar');잘못되었습니다
Joel James

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()당신을 위해 해싱을 할 것입니다.
alec

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


역할 배열에서 대괄호를 놓쳤습니다
SeanJA

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.