2010-10-14 12 views
8

Stiamo per distribuire un sito Drupal all'interno della rete aziendale. È necessario che l'utente reimposti la password. Abbiamo un meccanismo di ripristino della password centralizzato (per il single sign on):Come modificare la password utente di Drupal a livello di programmazione?

  • utente invia una richiesta di modifica della password nel sistema di
  • la richiesta viene inviata al server una password
  • server password reimpostare la password dell'utente in tutti i sistemi con una nuova password
  • il server della password invierà la nuova password al cellulare dell'utente tramite sms

Ora w Aggiungiamo il sito Drupal allo a tutti i sistemi. Si prega di suggerire un modo per cambiare la password di accesso di Drupal da un programma esterno (si supponga che il sistema possa eseguire script sull'host Drupal e modificare il database MySQL di Drupal).

risposta

4

Se si utilizza Drupal 6, la password memorizzata nel sistema è un semplice md5 della password. Se stai utilizzando script php per attivare la reimpostazione della password, utilizza la funzione http://php.net/manual/en/function.md5.php.

Nome utente e password sono memorizzati nella tabella users. L'hash md5 è memorizzato nella colonna pass.

6

per Drupal 7 - Spero che questo codice di funzione personalizzata risolve cambiamento password per anonima utente.

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

Un'altra possibilità per Drupal 7 è:

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

Ciò hash automaticamente la password, senza la necessità di scrivere direttamente al database.

+0

Non ha funzionato per me. Salvato la password nel database senza hashing. –

1

Ecco un altro approccio Drupal 7 più sofisticato basato sul dato $username. Supporta anche gli indirizzi e-mail usati come username.

$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

Ci sono già molte belle risposte qui, ma credo di aggiungere quello che ho trovato facile per me.

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

Dato che tutto è impostato correttamente, la password dell'utente verrà aggiornata.

Nota: Se hai dimenticato la password di root, è possibile ignorare la gestione degli errori, ecc Aggiungere queste righe in index.php prima menu_execute_active_handler(); e aprire qualsiasi pagina per reimpostare la password. Non dimenticare di rimuovere le linee dopo aver finito!

Problemi correlati