Hola,
tengo que enviar la contrasena de usuario cuando el mismo usuario se ha perdido su contrasena.
He creado la funcion por el envio de correos y todo sale bien.
Pero tengo un problema.
Es que cuando el usuario se registra le guardo la contrasena criptada en la accion con esto:
...............
$model->password=$model->hashPassword($_POST['User']['password'], $session=$model->generateSalt());
...............
y en el model User con estas reglas:
public function validatePassword($password)
{
return $this->hashPassword($password,$this->session)===$this->password;
}
public function hashPassword($password,$salt)
{
return md5($salt.$password);
}
public function generateSalt()
{
return uniqid('',true);
}
En tonces cuando el se va a recuperar su contrasena le llega criptada por correo.
Como puedo hacer para que le llegue encriptada?
Si no me equivoco no se puede encriptar este tipo de criptacion ( o mejor se puede gracias a algunos sitios de base datos criptados). Pero tambien quiero que la contrasena sea criptada. Ahora tengo dos soluciones:
-
no cripto la contrasena -> tampoco es bueno.
-
le genero una nueva contrasena antes que salga la mail -> no se como realizarlo. Seria un beforeSave?
Esta es mi accion para recuperar su contrasena:
//RECUPERO PASSWORD FORM
public function actionRecuperoPassword()
{
$model=new RecuperoPassword;
$msg = '';
if (isset($_POST["RecuperoPassword"]))
{
$model->attributes = $_POST['RecuperoPassword'];
if(!$model->validate())
{
$msg = "<strong class='text-error'>Errore durante 1\' invio del Form</strong>";
//print_r($msg);
}
else
{
$connessione = Yii::app()->db;
//verifica se esiste l username
$ricerca = "SELECT username, email FROM user WHERE ";
$ricerca .= "username='".$model->username."' AND email='$model->email'";
$risultato = $connessione->createCommand($ricerca);
$righe = $risultato->query();
$esiste = false;
foreach ($righe as $riga)
{
$esiste = true;
}
//se l' username esiste
if ($esiste === true)
{
//Trova la sua password
$ricerca = "SELECT password FROM user WHERE ";
$ricerca .= "username='".$model->username."' AND email='".$model->email."'";
$risultato = $connessione->createCommand($ricerca)->query();
$risultato->bindColumn(1, $password);
while($risultato->read()!==false)
{
$password = $password;
}
$email = new InviaEmail;
$subject = "Hai richiesto il recupero della tua password";
$subject .= Yii::app()->name;
$message = "Benvenuto" .$model->username. "questa è la tua password" ;
$message .= $password;
$message .= "<br />";
$message .="<a href='http://localhost/sito/'>Vai al Sito</a>";
$email->Invia_Email
(
array(Yii::app()->params['adminEmail'], Yii::app()->name),
array($model->email, $model->username),
$subject,
$message
);
$model->username ='' ;
$model->email = '' ;
$model->captcha = '' ;
$msg = "<strong class='text-info'>La password ti è stata inviata via email</strong>";
}
else{
$msg = "<strong class='text-error'>Non è stato trovato nessun utente con le credenziali inserite nel form. Contatta l' amministratore</strong>";
}
}
}
$this->render('recuperopassword', array('model'=>$model, 'msg'=>$msg));
}