Implementar cambio de contraseña

En el foro se ve mucho el requerimiento, para que el usuario, pueda recordar o cambiar su contraseña, sería bueno implementarlo de de una vez.

Paciencia amigo XD… en la version 1.5 se incluye un metodo para que el usuario pueda cambiar su clave en caso de haberla olvidado.

Saludos
Richard

Igualmente Jhon para hacer el cambio de contraseña podrías implementar una operación para hacer la misma.
No es muy dificil, solo tendrías que correr el update sobre la base de toba.
Acá te muestro un ejemplo que hice en un proyecto:

<?php
class ci_cambio_contrasenia extends toba_ci
{  
    //-----------------------------------------------------------------------------------
    //---- DEPENDENCIAS -----------------------------------------------------------------
    //-----------------------------------------------------------------------------------
  
    //---- formulario -------------------------------------------------------------------
  
	    function evt__formulario__modificacion($datos)
	    {       
	        $usuario = toba::usuario()->get_id();
	    if (!(toba_usuario_basico::autenticar($usuario, $datos['clave_actual'])))
	    {
	           toba::notificacion()->agregar("La clave actual ingresada no es la correcta.");
	         return;
	       }   
	       if($datos['nueva_clave'] != $datos['repeticion_clave'])
	            $this->informar_msg("La contraseña nueva y la confirmación deben ser iguales");
	        else
	        {           
	         $sql = "UPDATE
	                     apex_usuario
	                 SET
	                   clave = '$datos[nueva_clave]'                   
	                 WHERE
	                   usuario = '$usuario';
	             ";
	      toba_instancia::instancia()->get_db()->ejecutar($sql);
	      $this->pantalla()->set_descripcion('La clave fue actualizada correctamente.
');       
	        }       
	           
	    }
	} 
	  
	?>

Está operación tiene un ci con un formulario.
Adjunto imagen de formulario.

Saludos.


OK, funciono tal como lo presentas.

Te agradezco

Hola,

En la UNQ, hicimos una pantalla que hacia lo mismo, y fue implementado en el SIU-Pilaga, pero de una manera mas engorrosa, sin utilizar algunas herramientas que da el toba, que aca se muestran, el unico detalle que le veo a el codigo que ustedes muestran, es que no encriptan la clave antes de guardarla. Me tome un minuto y convine los dos codigos (y tambien mejore un poco mi codigo usando mas funciones toba)

[code=php]

<?php class cambiar_clave extends toba_ci { //----------------------------------------------------------------------------------- //---- DEPENDENCIAS ----------------------------------------------------------------- //----------------------------------------------------------------------------------- //---- formulario ------------------------------------------------------------------- function evt__formulario__modificacion($datos) { $id_usuario = toba::usuario()->get_id(); if (!(toba_usuario_basico::autenticar($usuario, $datos['clave_vieja']))) { toba::notificacion()->agregar("La clave actual ingresada no es la correcta."); return; } if($datos['clave_nueva'] == $datos['clave_nueva_confirmar']) { $datos_usuario = toba::instancia()->get_info_autenticacion($id_usuario); $algoritmo = $datos_usuario['autentificacion']; $clave = $datos['clave_nueva']; if ($algoritmo != 'plano') { if ($algoritmo == 'md5') { $clave = hash($algoritmo, $clave); } else { $clave = encriptar_con_sal($clave, $algoritmo, $datos_usuario['clave']); } } $sql = "UPDATE apex_usuario SET clave = '".$clave."' WHERE usuario = '$id_usuario'"; //toba::db('toba')->ejecutar($sql); toba_instancia::instancia()->get_db()->ejecutar($sql); $this->pantalla()->set_descripcion('La clave fue actualizada correctamente. '); }else{ toba::notificacion()->agregar("La clave y la confirmacion de la clave no son iguales!"); } } //El formato del retorno debe ser array('id_ef' => $valor, ...) function conf__formulario($componente) { $datos = array( 'usuario' => toba::usuario()->get_id(), 'nombre' => toba::usuario()->get_nombre() ); return $datos; } } ?>


Espero que les sirva a ustedes, mientras tanto... voy a volver a enviar este codigo al proyecto SIU-Pilaga

---

Hola Gustavo,

gracias por tu aporte, te hago 1 observacion:

  • Ya que estamos hablando de manejar las claves de manera propia creo que seria mas que recomendable descartar como posibilidades el guardar los pwd en texto plano y con un simple hash, en toba ambos metodos persisten al solo hecho de ofrecer compatibilidad hacia atras, pero en la creacion de las nuevas cuentas la sugerencia es siempre hacia el uso de la encriptacion con salt, que de hecho tampoco es a prueba de todo… pero ciertamente mas seguro que un md5 pelado.

Creo que el problema que se presentaba era atacar aquellos cambios de clave en los que el usuario olvido la clave previa, en esos casos se dificulta bastante determinar que el pedido de cambio viene de la persona correcta. En tu caso supongo que dicha persona deberia acercarse a la dependencia de la universidad para poder efectuar el cambio, de otro modo no podra cambiar su clave.

Lo mas mejor (diria un paisano) seria presentarle al usuario un desafio contra el cual ‘autenticarlo’… el problema seria la efectividad del metodo ya que normalmente la gente usa cosas demasiado cotidianas para no tener que andar recordando y eso pone el mismo metodo en riesgo ya que son respuestas intuibles. Esto tambien implica hacer mas engorroso el proceso de alta del usuario en toba, que hoy tiene una vision mas minimalista en cuanto a los datos, de todas formas es algo mas que interesante como extension de los proyectos… sobre todo de aquellos que manejan los usuarios de forma propia.

En definitiva, muy buena tu observacion sobre la seguridad faltante en el codigo anterior y el agregado del mismo al proceso. Ya que tu intencion es enviarlo para la gente de Pilaga, fijate si antes le podes agregar lo que te comentaba… seguro van a estar mas que interesados de tener algo asi.

Saludos
Richard

Richard, adjunto una presentacion que realizaron los técnicos de Guaraní de la UNLP y como ellos implementaron el recupero de la clave en su sistema de preinscripcion a carreras.
Hace una comparación de como lo hacen algunos de los sitios mas grandes (en cantidad de usuarios) respecto del olvido de la contraseña. Espero les sea de utilidad.