코드에서 사용자 비밀번호를 설정 하시겠습니까?


9

코드에서 사용자 비밀번호를 변경하고 싶습니다.

user_load객체를 반환하고 user_save배열을 원하기 때문에 이것은 간단하지 않습니다.

누군가가 빠르고 쉬운 방법을 찾았다 고 가정합니다.


내 현재 솔루션은 다음과 같습니다.

db_update('users')
  ->fields(array('pass' => user_hash_password('some_password')))
  ->condition('uid', 1)
  ->execute();

그러나 나는 이것이 대부분의 고리를 우회하는 것을 좋아하지 않습니다.

답변:


19

user_save()다음 코드와 유사한 코드를 사용하여 호출 하면됩니다.

$edit['pass'] = 'New password';
user_save($account, $edit);

$account사용자 계정이 변경할 사용자 개체를 포함합니다. 를 사용하여로드 user_load()하지만 현재 로그인 한 사용자의 사용자 객체 일 수도 있습니다. 후자의 경우 Drupal은 다음 코드 ( user_save ()의 일부)를 사용하여 세션을 재생성합니다 .

  // If the password changed, delete all open sessions and recreate
  // the current one.
  if ($account->pass != $account->original->pass) {
    drupal_session_destroy_uid($account->uid);
    if ($account->uid == $GLOBALS['user']->uid) {
      drupal_session_regenerate();
    }
  }

비밀번호 $edit['pass']는 일반 비밀번호입니다. user_save()함수 시작 부분에서 다음 코드를 사용하여 해시로 바꿉니다.

if (!empty($edit['pass'])) {
  // Allow alternate password hashing schemes.
  require_once DRUPAL_ROOT . '/' . variable_get('password_inc', 'includes/password.inc');
  $edit['pass'] = user_hash_password(trim($edit['pass']));
  // Abort if the hashing failed and returned FALSE.
  if (!$edit['pass']) {
    return FALSE;
  }
}

대안으로 drupal_submit_form ()을 사용할 수 있습니다 .

$form_state = array();
$form_state['user'] = $account;
$form_state['values']['pass']['pass1'] = 'New password';
$form_state['values']['pass']['pass2'] = 'New password';
$form_state['values']['op'] = t('Save');
drupal_form_submit('user_profile_form', $form_state);

이런 식으로, 예를 들어, 비밀번호를 확인하는 모듈이 있으면 해당 코드가 실행되며 form_get_errors () 에서 오류 코드를 얻습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.