Buenas!.. He vuelto con una consulta respecto a CPasswordHelper.
Resulta ser que tengo dicha clase funcionando en mi aplicación, pero solamente para cuando se crea un nuevo registro. Funciona diez puntos, pero no contempla algo tan simple como un cambio de contraseña.
He tratado de hacer un par de cambios para adaptarlo pero no he tenido éxito.
Así funciona sin cambio de contraseña (con la que se ingresa al crear el usuario):
Usuarios.php
public function validatePassword($password)
{
if (CPasswordHelper::verifyPassword($password,$this->password))
return true;
else
return false;
}
public function hashPassword($password)
{
return CPasswordHelper::hashPassword($password);
}
public function beforeSave()
{
if($this->isNewRecord)
{
$this->password=$this->hashPassword($this->password);
}
return true;
UserIdentity.php
private $_id;
public function authenticate()
{
$username=$this->username;
$password=$this->password;
$user=Usuarios::model()->findByAttributes(array('username'=>$username));
if($user==null)
{
$this->errorCode=self::ERROR_USERNAME_INVALID;
}
else if(!$user->validatePassword($password))
{
$this->errorCode=self::ERROR_PASSWORD_INVALID;
}
else
{
$this->_id=$user->id;
$this->username=$user->username;
$this->errorCode=self::ERROR_NONE;
}
return $this->errorCode==self::ERROR_NONE;
}
Traté de adaptarlo usando afterFind() para comprobar si hay cambios en el password usando esta publicación como referencia, pero los datos obtenidos en afterFind() llegan vacíos a beforeSave(), es decir, cuando chequeo $oldAttributes me da ‘null’, a pesar de que al comprobar la ejecución de afterFind() se carga correctamente.
public function afterFind()
{
$this->oldAttributes = $this->attributes;
return true;
}
public function validatePassword($password)
{
if (CPasswordHelper::verifyPassword($password,$this->password))
return true;
else
return false;
}
public function hashPassword($password)
{
return CPasswordHelper::hashPassword($password);
}
public function beforeSave()
{
if(($this->isNewRecord) || ((isset($oldAttributes['password'])) && $this->oldAttributes['password']!=$this->password))
{
$this->password=$this->hashPassword($this->password);
}
return true;
}
¿Alguien tiene alguna sugerencia de como solucionar el problema con el afterFind() o algún otro método alternativo de hacerlo?
Desde ya gracias por colaborar y por su tiempo.
Saludos!