ตั้งรหัสผ่านผู้ใช้เป็นรหัสหรือไม่


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.