Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/02/2014, 10:48
Eifos
 
Fecha de Ingreso: marzo-2013
Mensajes: 52
Antigüedad: 11 años, 8 meses
Puntos: 0
Scrip Recuperar contraseña

Buenos Dias

mi duda es la siguiente, yo quiero un script para que el usuario pueda recuperar su contraseña, pero que cumpla los siguientes parametros:

1. El usuario entra en una vista donde se le solicita su email y que
llene un captchar (uso el de google)

2. Se validan los datos si los datos son correctos procede al paso 3
sino solo confirma el envió de correo (esto es para que un usuario no
intente usar varios correos buscando un resultado.

3. Este genera en una tabla aparte una contraseña y un keytoken y la
hora que se creo la contraseña. Se envía un correo con el KeyToken al
correo introducido.

4. El correo le indica al usuario que se solicito un cambio de
contraseña y para poder realizar el proceso debe validar el proceso
haciendo click en el vinculo que trae el correo.

5. Si hace click en el vinculo llega a una vista que el confirma que
se a validado el proceso y se le enviara la contraseña, dentro de la
validación se verifica la hora que es y la que se guardo en la base de
datos si ha pasado más de 24 hora envía un error que el token no es
valido.

6. Se envía un correo con la nueva contraseña y se actualiza la nueva
contraseña en la tabla de usuarios.


Actualmente estoy usando el siguiente script, pero no me gusta ya que cualquiera que conozca el correo del usuario puede cambiar su contraseña.

Código PHP:
<?php
    
include('acceso_db.php'); // incluímos los datos de acceso a la BD
?>
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <?php
        
if(isset($_POST['enviar'])) { // comprobamos que se han enviado los datos del formulario
            
if(empty($_POST['usuario_nombre'])) {
                echo 
"No ha ingresado el usuario. <a href='javascript:history.back();'>Reintentar</a>";
            }else {
                
$usuario_nombre mysql_real_escape_string($_POST['usuario_nombre']);
                
$usuario_nombre trim($usuario_nombre);
                
$sql mysql_query("SELECT usuario_nombre, usuario_clave, usuario_email FROM usuarios WHERE usuario_nombre='".$usuario_nombre."'");
                if(
mysql_num_rows($sql)) {
                    
$row mysql_fetch_assoc($sql);
                    
$num_caracteres "10"// asignamos el número de caracteres que va a tener la nueva contraseña
                    
$nueva_clave substr(md5(rand()),0,$num_caracteres); // generamos una nueva contraseña de forma aleatoria
                    
$usuario_nombre $row['usuario_nombre'];
                    
$usuario_clave $nueva_clave// la nueva contraseña que se enviará por correo al usuario
                    
$usuario_clave2 md5($usuario_clave); // encriptamos la nueva contraseña para guardarla en la BD
                    
$usuario_email $row['usuario_email'];
                    
// actualizamos los datos (contraseña) del usuario que solicitó su contraseña
                    
mysql_query("UPDATE usuarios SET usuario_clave='".$usuario_clave2."' WHERE usuario_nombre='".$usuario_nombre."'");
                    
// Enviamos por email la nueva contraseña
                    
$remite_nombre ""// Tu nombre o el de tu página
                    
$remite_email ""// tu correo
                    
$asunto "Recuperación de contraseña"// Asunto (se puede cambiar)
                    
$mensaje "Se ha generado una nueva contraseña para el usuario <strong>".$usuario_nombre."</strong>. La nueva contraseña es: <strong>".$usuario_clave."</strong>.";
                    
$cabeceras "From: ".$remite_nombre." <".$remite_email.">\r\n";
                    
$cabeceras $cabeceras."Mime-Version: 1.0\n";
                    
$cabeceras $cabeceras."Content-Type: text/html";
                    
$enviar_email mail($usuario_email,$asunto,$mensaje,$cabeceras);
                    if(
$enviar_email) {
                        echo 
"La nueva contraseña ha sido enviada al email asociado al usuario ".$usuario_nombre.".";
                    }else {
                        echo 
"No se ha podido enviar el email. <a href='javascript:history.back();'>Reintentar</a>";
                    }
                }else {
                    echo 
"El usuario <strong>".$usuario_nombre."</strong> no está registrado. <a href='javascript:history.back();'>Reintentar</a>";
                }
            }
        }else {
    
?>
        <form action="<?=$_SERVER['PHP_SELF']?>" method="post">
            <label>Usuario:</label><br />
            <input type="text" name="usuario_nombre" /><br />
            <input type="submit" name="enviar" value="Enviar" />
        </form>
    <?php
        
}
    
?> 
</body>
</html>
Gracias por su tiempo