2010-10-14 10 views
8

Chúng tôi sẽ triển khai một trang web Drupal bên trong mạng nội bộ của công ty. Có một yêu cầu để người dùng đặt lại mật khẩu. Chúng tôi có một cơ chế khôi phục mật khẩu tập trung (đối với dấu hiệu duy nhất trên):Làm thế nào để thay đổi mật khẩu người dùng Drupal theo lập trình?

  • dùng gửi yêu cầu thay đổi mật khẩu trong hệ thống
  • yêu cầu được gửi đến một máy chủ mật khẩu
  • máy chủ mật khẩu sẽ thiết lập lại mật khẩu của người dùng trong tất cả các hệ với một mật khẩu mới
  • máy chủ mật khẩu sẽ gửi mật khẩu mới vào điện thoại di động của người dùng thông qua sms

Bây giờ w e sẽ thêm trang web Drupal vào tất cả các hệ thống. Vui lòng đề xuất cách thay đổi mật khẩu đăng nhập của Drupal bằng một chương trình bên ngoài (giả sử hệ thống có thể chạy tập lệnh trên máy chủ Drupal và chỉnh sửa cơ sở dữ liệu MySQL Drupal).

Trả lời

4

Nếu bạn đang sử dụng Drupal 6 thì mật khẩu được lưu trữ trong hệ thống là một md5 đơn giản của mật khẩu. Nếu bạn đang sử dụng tập lệnh php để kích hoạt đặt lại mật khẩu, hãy sử dụng chức năng http://php.net/manual/en/function.md5.php.

Tên người dùng và Mật khẩu được lưu trữ trong bảng users. Hàm băm md5 được lưu trữ trong cột pass.

6

Đối với Drupal 7 - Hy vọng mã chức năng tùy chỉnh này giải quyết thay đổi mật khẩu cho vô danh người dùng.

function password_reset(){ 
    global $user; 
    $hashthepass = 'password'; /* Your password value*/ 
    require_once DRUPAL_ROOT . '/' . variable_get('password_inc', 'includes/password.inc'); 
    $hashthepass = user_hash_password(trim($hashthepass)); 
    // Abort if the hashing failed and returned FALSE. 
    if (!$hashthepass) { 
     return FALSE; 
    } 
    else { 
     db_update('users') 
     ->fields(array(
      'pass' => $hashthepass 
     )) 
     ->condition('uid', $user->uid)  
     ->execute(); 
    } 
} 
1

Một khả năng cho Drupal 7 là:

$user = user_load($GLOBALS['user']->uid); 
$user->pass = 'the new password'; 
user_save((object) array('uid' => $user->uid), (array) $user); 

này sẽ tự động băm mật khẩu, mà không cần phải viết trực tiếp vào cơ sở dữ liệu.

+0

Không hiệu quả đối với tôi. Đã lưu mật khẩu vào cơ sở dữ liệu mà không băm. –

1

Đây là một cách tiếp cận Drupal 7 tinh vi hơn dựa trên $username nhất định. Nó cũng hỗ trợ các địa chỉ e-mail được sử dụng làm tên người dùng.

$users = user_load_multiple(array(), array('mail' => $username, 'status' => '1')); 
$account = reset($users); 
if (!$account) { 
    // No success, try to load by name. 
    $users = user_load_multiple(array(), array('name' => $username, 'status' => '1')); 
    $account = reset($users); 
} 

if ($account) { 
    $account->pass = 'new password'; 
    user_save($account); 
} 
else { 
    watchdog('user', 'Cannot load user: %user', array('%user' => $username), array(), WATCHDOG_ERROR); 
} 
0

Đã có nhiều câu trả lời hay ở đây, nhưng tôi tin rằng tôi thêm câu trả lời mà tôi thấy dễ dàng cho tôi.

// ID of the user whose password you wish to change. 
$uid = 1; 

// Load the user account. 
$account = user_load($uid); 

// Load hashing libraries. 
// You can use module_load_include() if you want to make it cleaner. 
require_once DRUPAL_ROOT . '/' . variable_get('password_inc', 'includes/password.inc'); 

// Generate new password hash. 
$password_hash = user_hash_password('enter-new-password-here'); 
if (!$password_hash) { 
    // Password could not be hashed. Handle the error. 
    exit('Password could not be hashed.'); 
} 

$account->pass = $password_hash; 
user_save($account); 

Cho mọi thứ được thiết lập chính xác, mật khẩu của người dùng sẽ được cập nhật.

Lưu ý: Nếu bạn đã quên mật khẩu gốc của bạn, bạn có thể yên tâm bỏ qua việc xử lý lỗi, vv Thêm những dòng này trong index.php trước menu_execute_active_handler(); và mở bất kỳ trang nào để đặt lại mật khẩu của bạn. Đừng quên để loại bỏ các dòng sau khi bạn đang thực hiện mặc dù!