Foros del Web » Programando para Internet » PHP »

Activacion de cuenta por email

Estas en el tema de Activacion de cuenta por email en el foro de PHP en Foros del Web. Hola Yo tengo hecho en mi pagina el registro de usuarios y para hacer login pero me gustaria que al registrarse un usuario se le ...
  #1 (permalink)  
Antiguo 04/08/2005, 04:15
Avatar de kokecola2k2  
Fecha de Ingreso: febrero-2004
Mensajes: 130
Antigüedad: 20 años, 1 mes
Puntos: 0
Activacion de cuenta por email

Hola
Yo tengo hecho en mi pagina el registro de usuarios y para hacer login pero me gustaria que al registrarse un usuario se le mande al correo un link para activar su cuenta, y sino lo activa que se borre el usuario en unas horas...
Como seria el codigo? Y ese codigo depende de como tengo hecho el registro o funcionaria sea como sea mi codigo para el registro.
Asias
  #2 (permalink)  
Antiguo 04/08/2005, 06:41
 
Fecha de Ingreso: septiembre-2004
Ubicación: Montevideo
Mensajes: 346
Antigüedad: 19 años, 7 meses
Puntos: 0
Tendrias que agregar a tu bd un campo Activado, y en el mail que le mandas al usuario poner una URL que llema al script de activacion pasandole como variable por ejemplo el id del usuario:

Ej:

Para activar su cuenta haga clic aqui:

http://www.misitio.com/activar.php?id=1321684650164684

cuandoi se hace clic ahi se activa el usuario.

Por suspuesto, que debes controlar a la hora del login que ese campo tenga el valor que significa: activado. y si no es asi mostrar un error.

Bueno, espero que te sirva de ayuda.

Saludos,

Liber
__________________
Liber
  #3 (permalink)  
Antiguo 04/08/2005, 06:47
 
Fecha de Ingreso: septiembre-2004
Ubicación: Montevideo
Mensajes: 346
Antigüedad: 19 años, 7 meses
Puntos: 0
No lo dije, pero para mandar un mail, usa la funcion mail(), Saludos.
__________________
Liber
  #4 (permalink)  
Antiguo 04/08/2005, 06:50
Avatar de kokecola2k2  
Fecha de Ingreso: febrero-2004
Mensajes: 130
Antigüedad: 20 años, 1 mes
Puntos: 0
y en la pagina activar.php, como cojo el id de la url?
Yo he conseguido hasta mandar el email con la url donde incluyo nombre y contraseña, pero no se como coger de la url el nombre y la contraseña para hacer una consulta con esos 2 datos, update blablabla where nick = el delaurl y contraseña = delaurl y cambio el campo de activado
Como se haria eso?
  #5 (permalink)  
Antiguo 04/08/2005, 06:52
 
Fecha de Ingreso: septiembre-2004
Ubicación: Montevideo
Mensajes: 346
Antigüedad: 19 años, 7 meses
Puntos: 0
$_GET['id'], en el ejemplo que yo te puse es la variable de la URL, Saludos. Lo mismo seria para cualqueir variable que pases por URL. Saludos.
__________________
Liber
  #6 (permalink)  
Antiguo 04/08/2005, 06:54
 
Fecha de Ingreso: septiembre-2004
Ubicación: Montevideo
Mensajes: 346
Antigüedad: 19 años, 7 meses
Puntos: 0
en la pagina activar.php, tendría que haber algo como:

Código PHP:
if(isset($_GET['id'])){
   
activar($_GET['id']);
}

function 
activar($id){
   
conexion y consulta SQL.

Espero que sirva, Saludos.
__________________
Liber
  #7 (permalink)  
Antiguo 04/08/2005, 08:53
Avatar de 8461277  
Fecha de Ingreso: diciembre-2002
Ubicación: san juan de los morros
Mensajes: 887
Antigüedad: 21 años, 4 meses
Puntos: 1
podrian exlicarlo mejor, ya que estoy intersado para la pagina en donde trabajo
__________________
Miguel Padrón :cool:
  #8 (permalink)  
Antiguo 04/08/2005, 09:22
 
Fecha de Ingreso: septiembre-2004
Ubicación: Montevideo
Mensajes: 346
Antigüedad: 19 años, 7 meses
Puntos: 0
si tuviera q explicarlo de nuevo, lo haria igual, que parte no esta clara?, asi pienso de nuevo y busco una forma mejor, Saludos!
__________________
Liber
  #9 (permalink)  
Antiguo 04/08/2005, 19:18
okram
Invitado
 
Mensajes: n/a
Puntos:
codigoooo

Salu2...

hace un tiempo hice un sistema asi.... te comparto aqui el codigo COMENTADO haber si te sirve

En la pagina en la que procesas el formulario de registro, donde añades los datos a la base de datos:
Código PHP:
<?
//Aqui una funcion para generar un codigo aleatorio
//La puedes incluir en tu archivo de funciones si es que tienes uno
function genera_random($longitud)

$exp_reg="[^A-Z0-9]"

return 
substr(eregi_replace($exp_reg""md5(time())) . 
eregi_replace($exp_reg""md5(time())) . 
eregi_replace($exp_reg""md5(time())), 
0$longitud); 
}

//Realizas toda la validacion de formulario que tengas,
//y pones esto antes de insertar los datos en la bd
$mkey=genera_random(30); //El 30 es el numero de caracteres que tendra tu codigo (puedes cambiarlo)
$verificado="no"//El default es no

//AQUI realizas la consulta para añadir los datos de tu formulario a la bd.
//DEBES AÑADIR TAMBIEN LAS VARIABLES $mkey Y $verificado
//RECUERDA QUE DEBES TENER EN LA TABLA QUE USES 2 CAMPOS MAS
//UNO SERA "MKEY", DONDE ESTARA EL CODIGO DE VERIFICACION
//EL OTRO SERA "VERIFICADO", DONDE HABRA UN NO SI NO ESTA VERIFICADO, Y UN SI, SI LO ESTA. AMBOS CAMPOS DEL TIPO VARCHAR

//ahora el codigo que enviara el mail de vcerificaion
//Para el envio del mail, yo use la clase phpMailer  :-D ...
//asi que te posteare codigo con esa clase ( io no uso la funcion mail() )

require "../../includes/class.phpmailer.php"//Busca este archivo en el google. Es el archivo d la clase phpmailer, que viene con otro llamado class.smtp.php
$mail = new phpmailer();
$mail->PluginDir "../../includes/"//Aqui el doirectorio dnd se encuentra el archivo class.smtp.php
$mail->Mailer "smtp";
$mail->Host "smtp.mail.yahoo.ca"//Tu host smtp (yo uso yahoo.ca)... supongo que puedes poner localhost.....
$mail->SMTPAuth true//Supongo que puede ir false si usas localhost
$mail->Username "usuario"//Usuario del servidor smtp. Supongo que puede ir vacio si usas localhost
$mail->Password "contraseña"//Contraseña en el servidor smtp. Supongo que puede ir vacio si usas localhost
$mail->From "[email protected]"//Direccion from de envio
$mail->FromName "Tu Web"//Nombre de Remitente
$mail->Timeout=40//El tiempo en segundos que tratara de enviar el mensaje antes de marcar error. SI tu mensaje es grande, dejalo donde esta, pero si es simple puedes bajarlo
$mail->AddAddress("$_POST[nombre_de_campo_de_email_en_el_formulario]"); //Aqui va el email al que envias el mensaje. Como viene de un formulario, pones $_POST[nombre del campo del email]
$mail->Subject "Confirme su email de registro"//asunto de tu mensaje

//AQUI VA EL BODY DEL MENSAJE EN HTML... 
//TE PONDRE LA PARTE DEL LINK NOMAS; TU LE DAS FORMATO...
//FIJATE QUE EL LINK VA HACIA LA PAGINA VERIFICAR.PHP
$mail->Body "Para verificar su dirección de correo electrónico haga clic en el siguiente link: <br><br><center><a href=\"verificar.php?MailKey=".$mkey."\">Click Aquí para Verificar</a></center>"

//AQUI VA UN BODY ALTERNATIVO; EN FORMATO SOLO TEXTO; SIN HTML
$mail->AltBody "Verifica tu email en http://tuweb.com/verificar.php?MailKey=".$mkey." Gracias";
$exito $mail->Send(); //Envias el mail, y si todo sale correcto exito tendra un valor X
while ((!$exito) && ($intentos 5)) //Ese 5 es el numero de intentos de enviar el mensaje, en caso de que falle al primer intento
{
sleep(5); //Mismo 5 que el de arriba (intentos)
//echo $mail->ErrorInfo;
$exito $mail->Send();
$intentos=$intentos+1;    
}
if(!
$exito//Si exito esta vacio, es que hubo problemas al enviar el mensaje
{
echo 
"Problemas enviando correo electrónico a ".$_POST[email];
echo 
"<br/>".$mail->ErrorInfo;    
}
else 
//SI el envio fue correcto....
{
echo 
"Revise su email";
}
?>

Bien hasta ahi ya añadiste el registro a tu tabla de usuarios y enviaste el mail, falta la pagina de confirmacion:

verificar.php
Código PHP:
<?
$key 
$_GET['MailKey']; //Guardas la variable que llego en la Url, que viene a ser el codigo de verificacion
if(!$key//Si no existe tal variable en la URL
{
header("Location: http://www.tuweb.com"); //Mandas al usuario a una pagina X
}

//INICIAMOS LA CONSULTA A LA TABLA, que se llamara usuarios
$query=mysql_query("SELECT * FROM usuarios WHERE mkey='".$key."'"); 

if(
$check=mysql_fetch_array($query)) //con este if verificamos que el codigo existe en la BD
{
if(
$check['verificado']==yes//Si el mail ya esta verificado
{
echo 
"tu mail ya esta verificado";
}
elseif(
$check['verificado']==no//Si no esta verificado
{
//Actualizamos la BD, y cambiamos el valor de dafault no en verificado por si
$sql "UPDATE usuarios SET verificado='si' WHERE mkey='$key' LIMIT 1";
mysql_query($sql); 
echo 
"tu mail ha sido verificado";
}
}
else 
//Si el codigo de verificacion no existe
{
echo 
"Tu codigo es incorrecto";
}
?>
Bueno eso es todo... espero que te sirva y si tienes algun problema postea aqui para ayudarte... Yo diseñe el codigo completo, asi que si usas este codigo me das los creditos ok??

No te olvides de realizar la coneccion a tu base de datos en cada pagina

Salu2
  #10 (permalink)  
Antiguo 04/08/2005, 19:23
okram
Invitado
 
Mensajes: n/a
Puntos:
Luego en cada pagina verificas con un if que el usuario ha confirmado su email, si el campo VERIFICADO devuelve un valor de si, entonces si esta.

Salu2
  #11 (permalink)  
Antiguo 04/08/2005, 19:25
Avatar de FuLaNo_  
Fecha de Ingreso: mayo-2003
Ubicación: Don Torcuato, Buenos Aires, Argentina
Mensajes: 1.250
Antigüedad: 20 años, 11 meses
Puntos: 2
buf... era mas simple la primer opcion... al registrarte mandas un mail con un link con el ID encriptado y listo...

La activacion de esta forma para lo unico que sirve es para comprobar la validez del email, por lo que cualquier cosa que mandes y se pueda contestar es valido...
__________________
I Love Programming...
  #12 (permalink)  
Antiguo 04/08/2005, 19:29
okram
Invitado
 
Mensajes: n/a
Puntos:
al final es igual, solo que esto le da un toque mas profesional ... parece harto por los comentarios pero en el fondo es lo mismo...

Salu2
  #13 (permalink)  
Antiguo 04/08/2005, 19:33
Avatar de FuLaNo_  
Fecha de Ingreso: mayo-2003
Ubicación: Don Torcuato, Buenos Aires, Argentina
Mensajes: 1.250
Antigüedad: 20 años, 11 meses
Puntos: 2
No.. digamos que el tuyo es mejor porque el numero es generado aleatoreamente... osea que ningun usuario, salvo el registrante, sabrá que numero es..

Con el id uno puede registrarse entonces ya conoce la URL a la cual debe dirigirse, luego puede registrarse nuevamente con cualquier mail y simplemente ingresar a la URL del registro anterior cambiando la ID (md5(id))

Digamos... para un usuario novato es un impedimento grande, pero con la ID es mas facil engañar al sistema...
__________________
I Love Programming...
  #14 (permalink)  
Antiguo 04/08/2005, 20:44
okram
Invitado
 
Mensajes: n/a
Puntos:
De hecho esa es la razon por la que preferi usar un numero aleatorio y no el id como inicialmente estaba haciendo, ya que lo que yo queria era que cada persona se registre una sola vez, o por lo menos que el mail sea registrado una sola vez. Si la confirmacion hubiera sido por id, bastaba con ver la url de la pagina de confirmacion, como verificar.php?id=okram por ejemplo, y luego registrar mas cuentas con emails que no existen y simplemente ir a esa página cambiandole el id. Luego intente hacerlo encriptando el id de usuario con md5, pero me surgieron problemas al intentar comparar el id encriptado que viene en la url con el id almacenado en al base de datos, asiq ue me quede con la opcion de un codigo aleatorio.

Salu2
  #15 (permalink)  
Antiguo 05/08/2005, 03:01
Avatar de kokecola2k2  
Fecha de Ingreso: febrero-2004
Mensajes: 130
Antigüedad: 20 años, 1 mes
Puntos: 0
Pues yo lo he hecho mandando en el email con un enlace q contiene su nick y la contraseña (encriptada con md5) y eso activa su cuenta.
Y solo lo quiero utilizar para que esa persona ponga una cuenta q existe o es suya, y controlo en el registro que la cuenta no exista ya en la bd, asi que no puede pone la url xq la contraseña está encriptada
  #16 (permalink)  
Antiguo 16/04/2011, 15:51
 
Fecha de Ingreso: marzo-2011
Mensajes: 1
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Activacion de cuenta por email

oye me podrias dar el codigo de una pagina completa osea con el login registro etc y sobre todo la activacion del link y la base de datos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:07.