[SOLUCIONADO] Adaptar CPasswordHelper para cambios de contraseña.

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! :)

cuidado en beforeSave estas usando $oldAttributes en lugar de $this->oldAttributes, por eso te da null.

Por lo demás a mi me parece que esta bien.

Saludos

Que salame. Ayer me di cuenta poco antes de irme a dormir. Jajaja… Muchas gracias!.. Está funcionando :)

Lo normal con los errores, a mi me salen por todos los lados, bien por que este funcionando y saludos.