Problema Al Modificar Contraseña Encriptada

Saludos comunidad,

Les cuento mi problema, resulta que tengo tengo una acción create para que al crear un usuario, encripte en MD5 su contraseña


public function actionCreate() {

        $model = new Usuario('create');


        // Uncomment the following line if AJAX validation is needed

        // $this->performAjaxValidation($model);


        if (isset($_POST['Usuario'])) {

            $model->attributes = $_POST['Usuario'];


            $model->password = md5($model->password); //Encriptar en MD5

            if ($model->save()) {

                $this->redirect(array('view', 'id' => $model->fun_id));

            }

        }


        $this->render('create', array(

            'model' => $model,

        ));

    }

Todo está funcionando perfecto, el problema viene cuando quiero actualizar el usuario, ya que l textField que contiene el password, en primer lugar, encriptaba lo que ya estaba enscriptado (ESTO YA ESTA SOLUCIONADO), el problema que me queda, es que en el textField muestra toda la contraseña encriptada, por lo que busco, o mostrar la contraseña desencriptada, o mostrar el textField vacío, y si está vacío, que tome la pass de la DB y no guarde una nueva. Pero al poner algo como $model->password, me toma otro valor. Lo que tengo es lo siguiente.


public function actionUpdate($id) {

        $model = $this->loadModel($id);


        // Uncomment the following line if AJAX validation is needed

        // $this->performAjaxValidation($model);


        if (isset($_POST['Usuario'])) {

            $old_pswd = $model->fun_password;

            $model->attributes = $_POST['Usuario'];

            

            if($model->password != $old_pswd)

                $model->password = md5($model->password); //Encriptar en MD5

            else

                $model->password = $old_pswd;

            

            if ($model->save()) {

                $this->redirect(array('view', 'id' => $model->fun_id));

            }

        }


        $this->render('update', array(

            'model' => $model,

        ));

    }

como lo podría solucionar?

Saludos!

Buenas.

No te he entendido muy bien lo q te pasa, pero si has encriptado en MD5, olvídate de desencriptar.

Lo q se hace es volver a encriptar la contraseña y compararla con la q ya está guardada (q también estará encriptada).

Lo que tienes q hacer es dejar la contraseña en blanco y en tu action comprobar q si $_POST[‘Usuario’][‘password’] está vacío, cargar en $model->password la contraseña actual.

Después guardas y listo.

Un saludo.

Solo comprueba que se haya enviado el password, cuando se envia un nuevo password $model->attributes = $_POST[‘Usuario’]; va a modificar el password original por el nuevo password, pero si no se envia un password el password original permanece, asi que solamente debes compobar que se haya enviado un nuevo password y si se envió encriptar y si no se envio no hacer nada.


public function actionUpdate($id) {

        $model = $this->loadModel($id);


        // Uncomment the following line if AJAX validation is needed

        // $this->performAjaxValidation($model);


        if (isset($_POST['Usuario'])) {

            $model->attributes = $_POST['Usuario'];

            if(isset($_POST['Usuario']['password'])){

                $model->password = md5($model->password); //Encriptar en MD5

            }            

            if ($model->save()) {

                $this->redirect(array('view', 'id' => $model->fun_id));

            }

        }


        $this->render('update', array(

            'model' => $model,

        ));

    }