답변:
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 () 에서 오류 코드를 얻습니다 .