2010-10-14 32 views
8

Vamos a implementar un sitio de Drupal dentro de la intranet de la compañía. Es necesario que el usuario restablezca la contraseña. Tenemos un mecanismo de restablecimiento de contraseña centralizado (para inicio de sesión único):¿Cómo cambiar la contraseña de usuario de Drupal programáticamente?

  • usuario envía una solicitud de cambio de contraseña en el sistema
  • la solicitud se envía a un servidor de contraseñas
  • el servidor contraseña se restablecerá la contraseña del usuario en todos los sistemas con una nueva contraseña
  • el servidor de contraseñas enviará la nueva contraseña al teléfono móvil del usuario a través de SMS

Ahora w Vamos a agregar el sitio de Drupal a todos los sistemas. Sugiera una forma de cambiar la contraseña de inicio de sesión de Drupal por un programa externo (supongamos que el sistema puede ejecutar secuencias de comandos en el host de Drupal y editar la base de datos MySQL de Drupal).

Respuesta

4

Si está utilizando Drupal 6, la contraseña almacenada en el sistema es un simple md5 de la contraseña. Si usa scripts php para activar el restablecimiento de la contraseña, utilice la función http://php.net/manual/en/function.md5.php.

El nombre de usuario y la contraseña se almacenan en la tabla users. El hash md5 se almacena en la columna pass.

6

para Drupal 7 - Espero este código de función personalizada resuelve cambio contraseña para usuario anónimo.

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

Otra posibilidad para Drupal 7 es:

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

Esto le hash de la contraseña de forma automática, sin necesidad de escribir directamente en la base de datos.

+0

No funcionó para mí. Guarde la contraseña en la base de datos sin hash. –

1

Aquí hay otro enfoque más sofisticado de Drupal 7 basado en el dado $username. También es compatible con las direcciones de correo electrónico utilizadas como nombre de usuario.

$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

Ya hay muchas buenas respuestas aquí, pero creo que agrego la que encontré fácil para mí.

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

Dado que todo está configurado correctamente, la contraseña de su usuario se actualizará.

Nota: Si ha olvidado su contraseña de root, puede ignorar el manejo de errores, etc. Añadir estas líneas, en index.php antes menu_execute_active_handler(); y abra cualquier página para restablecer su contraseña. ¡No olvides quitar las líneas una vez que hayas terminado!

Cuestiones relacionadas