Ver Mensaje Individual
  #37 (permalink)  
Antiguo 16/12/2012, 11:33
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Como recuperar password en sistema que gestiona cuentas de usuarios

OK haber por un lado tenemos el link para recuperar la pass

Código PHP:
Ver original
  1. <a href="index.php?controller=user_&accion=recuperar_contrasena">Olvide mi Contraseña</a>

que llama a esta funcion

Código PHP:
Ver original
  1. function recuperar_contrasena()
  2. {
  3.            
  4.      
  5.            $ok = false;
  6.  
  7.             if(isset($_POST['destinatario']))
  8.            {
  9.  
  10.              require 'views/envio.php';
  11.              $ok = true;
  12.  
  13.             }
  14.      
  15.             if($ok==true) {
  16.      
  17.             include('views/confirmacion.php');
  18.  
  19.            } else {
  20.  
  21.            //require 'views/frm_recuperar_contasena.php';
  22.            include('views/frm_recuperar_contasena.php');
  23.  
  24.            }
  25.  }

por otro lado envio.php

Código PHP:
Ver original
  1. <php
  2.      
  3.     ini_set ('error_reporting',-1);
  4.      
  5.     $destinatario_form = $_POST['destinatario'];
  6.     $usuario = 'postgres';
  7.     $contrasenia = '*****';
  8.        
  9.                 try {
  10.      
  11.                     $db = new PDO('pgsql:host=192.168.102.200;dbname=volcanoes',$usuario,$contrasenia);
  12.                     }catch(PDOException $e) {
  13.                     echo "Usuario y Clave Invalidas";
  14.                     throw new Exception("Usuario y Clave Invalidas", 0, $e);
  15.                     }
  16.      
  17.      
  18.     $consulta = $db->prepare("SELECT * FROM usuarios WHERE usu_correo ='$destinatario_form'");
  19.     $consulta->execute();
  20.      
  21.     while($fila = $consulta->fetch(PDO::FETCH_ASSOC))
  22.         {
  23.             $hash=$fila['usu_clave'];
  24.         }
  25.      
  26.      
  27.     require_once('phpMailer/class.phpmailer.php');
  28.     require_once("phpMailer/class.smtp.php");
  29.      
  30.     $consulta->execute();
  31.     $cuenta = $consulta->rowCount();
  32.     if($cuenta == 1){
  33.      
  34.     while($fila = $consulta->fetch(PDO::FETCH_ASSOC))
  35.         {
  36.            
  37.             $hash=$fila['usu_clave'];
  38.             $destinatario=$fila['usu_correo'];
  39.      
  40.         }
  41.     require_once('phpMailer/class.phpmailer.php');
  42.     require_once("phpMailer/class.smtp.php");
  43.      
  44.      
  45.      
  46.     $mail = new PHPMailer(true);
  47.     $mail->IsSMTP();
  48.     $mail->Host       = '172.25.1.3';
  49.     $mail->SMTPDebug  = 0;                
  50.     $mail->SMTPAuth   = false;
  51.     $mail->SMTPSecure = 'SSL';
  52.     $mail->Port       = 25;                  
  53.     $mail->Subject = "Asunto del correo";
  54.     $mail->AddAddress($destinatario);
  55.     $mail->SetFrom('[email protected]','Fenomenos Volcanicos');
  56.     $mail->Subject = 'Recuperacion Contraseña';
  57.     $mail->AltBody = 'To view the message, please use an HTML compatible email viewer!';
  58.     $mail->MsgHTML("<a href='http://192.168.102.9/volcanicos&time=".time()."&id=".$hash."'>".Recuperar.Contraseña."</a>"."<br>".$hash);
  59.      
  60.     if( ! $mail->Send())
  61.     {
  62.         $validate = 1;
  63.     }
  64.     else
  65.     {
  66.         $validate =  2;
  67.     }
  68.      
  69.     }
  70.     else
  71.     {
  72.         $validate = 0;
  73.     }
  74.      
  75.     ?>

por otro lado confirmacion.php

Código PHP:
Ver original
  1. <?php
  2.        
  3.     ini_set ('error_reporting', -1);
  4.      
  5.     switch($validate)
  6.     {
  7.         case 0:
  8.         echo 'El correo '.$destinatario_form.'<br>No esta Asociado a ningun usuario del Sistema';
  9.         break;
  10.      
  11.         case 1:
  12.         echo 'Se produjo un error en el envio del email , pruebe a intentarlo otra vez';
  13.         break;
  14.      
  15.         case 2:
  16.         echo 'Email enviado correctamente';
  17.         break;
  18.      
  19.         default :
  20.         echo 'se produjo en error';
  21.     }
  22.      
  23.     ?>


centremonos en esta linea

Código PHP:
Ver original
  1. $mail->MsgHTML("<a href='http://192.168.102.9/volcanicos&time=".time()."&id=".$hash."'>".Recuperar.Contraseña."</a>"."<br>".$hash);

time= time(); // controlamos el tiempo para la caducidad del link
token = sha1($_SERVER['HTTP_USER_AGENT'].$destinatario.rand()); // controlador para verificar
destinatario = $destinatario; // para verificar que usuario es

quedaria asi

Código PHP:
Ver original
  1. $mail->MsgHTML('<a href="http://192.168.102.9/volcanicos&time='.base64_encode(time()).'&us='.base64_encode($destinatario).'&do='.sha1($_SERVER['HTTP_USER_AGENT'].$destinatario.rand()).' ">Recuperar.Contraseña</a><br>');

ahora con todo esto ya tienes el link preparado

envio.php ahora quedari asi
Código PHP:
Ver original
  1. <php
  2.          
  3.         ini_set ('error_reporting',-1);
  4.          
  5.         $destinatario_form = $_POST['destinatario'];
  6.         $usuario = 'postgres';
  7.         $contrasenia = '*****';
  8.            
  9.                     try {
  10.          
  11.                         $db = new PDO('pgsql:host=192.168.102.200;dbname=volcanoes',$usuario,$contrasenia);
  12.                         }catch(PDOException $e) {
  13.                         echo "Usuario y Clave Invalidas";
  14.                         throw new Exception("Usuario y Clave Invalidas", 0, $e);
  15.                         }
  16.          
  17.          
  18.         $consulta = $db->prepare("SELECT * FROM usuarios WHERE usu_correo ='$destinatario_form'");
  19.         $consulta->execute();
  20.          
  21.         while($fila = $consulta->fetch(PDO::FETCH_ASSOC))
  22.             {
  23.                 $hash=$fila['usu_clave'];
  24.             }
  25.          
  26.          
  27.         require_once('phpMailer/class.phpmailer.php');
  28.         require_once("phpMailer/class.smtp.php");
  29.          
  30.         $consulta->execute();
  31.         $cuenta = $consulta->rowCount();
  32.         if($cuenta == 1){
  33.          
  34.         while($fila = $consulta->fetch(PDO::FETCH_ASSOC))
  35.             {
  36.                
  37.                 $hash=$fila['usu_clave'];
  38.                 $destinatario=$fila['usu_correo'];
  39.          
  40.             }
  41.         require_once('phpMailer/class.phpmailer.php');
  42.         require_once("phpMailer/class.smtp.php");
  43.          
  44. $do = sha1($_SERVER['HTTP_USER_AGENT'].$destinatario);
  45.          
  46.         $mail = new PHPMailer(true);
  47.         $mail->IsSMTP();
  48.         $mail->Host       = '172.25.1.3';
  49.         $mail->SMTPDebug  = 0;                
  50.         $mail->SMTPAuth   = false;
  51.         $mail->SMTPSecure = 'SSL';
  52.         $mail->Port       = 25;                  
  53.         $mail->Subject = "Asunto del correo";
  54.         $mail->AddAddress($destinatario);
  55.         $mail->SetFrom('[email protected]','Fenomenos Volcanicos');
  56.         $mail->Subject = 'Recuperacion Contraseña';
  57.         $mail->AltBody = 'To view the message, please use an HTML compatible email viewer!';
  58.         $mail->MsgHTML('<a href="http://192.168.102.9/volcanicos&ti='.base64_encode(time()).'&de='.base64_encode($destinatario).'&do='.$do.' ">Recuperar.Contraseña</a><br>');
  59.          
  60.         if( ! $mail->Send())
  61.         {
  62.             $validate = 1;
  63.         }
  64.         else
  65.         {
  66.             $validate =  2;
  67.         }
  68.          
  69.         }
  70.         else
  71.         {
  72.             $validate = 0;
  73.         }  
  74.  ?>

Última edición por webankenovi; 16/12/2012 a las 11:51