scusatemi, riprendo questo topic perchè a quanto pare la cosa che pensavo aver chiara, in realtà funziona per qualche strano motivo, nel login, ma non son riuscito più a riproporla sul sito.
In particolare ho una maschera, per la gestione di collaboratori, in cui si possono aggiungere/modificare/eliminare collaboratori. Il problema è che il cambio di password, col classico:
vecchia password
nuova password — ripeti password
non riesco a farlo funzionare, la vecchia password non riesce a riconoscerla e quindi sbaglio senza dubbio il crypting.
La cosa che non capisco è com’è possibile che nel login mi funzioni e qui no.
Il codice è questo:
public function verifica_oldPassword()
{
$load=AnagraficaUtenti::model()->findByPk(array("id_azienda"=>$this->id_azienda,"id_operatore"=>$this->id_operatore));
if ($load)
{ #quindi esiste l'utente
if ($load->password === crypt($this->vecchia_password, $load->password))
return true;#la password corrisponde
else
$this->addError('vecchia_password','La password non coincide');
}
else #l'utente non esiste
return true;
return false;
}
nella registrazione funziona cosi:
public function registra()
{
#alex_key è la chiave di cifratura del mio script
$alex_key=*********
$salt=Yii::app()->getSecurityManager()->generateRandomBytes('22');
$salt = '$5$'.$alex_key. strtr($salt, array('_' => '.', '~' => '/'));
$password = crypt($this->password, $salt);
e ottenuta la password la registro come varchar64 ovviamente.
L’assurdo appunto è che la logica funziona sul login, usando userIdentity opportunamente modificato, ma in questa maschera che ho creato mi dice puntualmente che la password non coincide.