Foros del Web » Programando para Internet » PHP »

Sistema de registro de usuarios mediante email de validación

Estas en el tema de Sistema de registro de usuarios mediante email de validación en el foro de PHP en Foros del Web. Me gustaría saber cómo se programa el típico sistema de registro de usuarios en el que, después de meter los datos en el formulario de ...
  #1 (permalink)  
Antiguo 30/09/2005, 07:40
 
Fecha de Ingreso: septiembre-2005
Mensajes: 94
Antigüedad: 18 años, 6 meses
Puntos: 0
Información Sistema de registro de usuarios mediante email de validación

Me gustaría saber cómo se programa el típico sistema de registro de usuarios en el que, después de meter los datos en el formulario de registro, el usuario recibe un correo en su buzón. En este correo hay un link que debe ser pulsado y, tras esto, el usuario es registrado.

Muchas gracias por todo, un saludo!
  #2 (permalink)  
Antiguo 30/09/2005, 09:10
Avatar de andinistas  
Fecha de Ingreso: julio-2003
Ubicación: Bogotá COL
Mensajes: 1.000
Antigüedad: 20 años, 9 meses
Puntos: 0
El proceso de creación de una cuenta como la describes puede ser el sigueinte:

1. El usuario se registra
2. Esos datos son guardados en la base de datos del sistema que programas (si quieres puedes enviar un mail de notificacion donde se avise que un nuevo usuario ha sido registrado en el sistema)
3. El usuario recibe un correo de con la notificación de que su registro ha sido completado con éxito pero que tiene que hacer un clic en un link para la activación de la cuenta.
4. El usuario hace clic e inmediatamente se activa la cuenta en el sistema (con esto se verifica que el usuario que se suscribio realmente quiere participar del registro en el sistema)
5. Proceso completado
6. Ya activada la cuenta el usuario podrá modificar sus datos personales, contraseñas, etc.

Ahora mi pregunta en qué lo vas a programar?
__________________
Un Saludo, Andinistas.
"Llegaron... Ellos tenían la biblia y nosotros la tierra... y nos dijieron: 'Cierren los ojos y recen.' Cerramos los ojos y cuando los abrimos,
ellos tenían la tierra y nosotros la biblia." Abadío Green.
  #3 (permalink)  
Antiguo 30/09/2005, 09:44
Avatar de elwata  
Fecha de Ingreso: junio-2005
Mensajes: 156
Antigüedad: 18 años, 10 meses
Puntos: 0
en tu script de guardado de datos a la base de datos tienes q añadir la función mail incluyendo el valor correspondiente al dato q contiene la dirección de email.
Por ejemplo:

mail($n4,"AELU :Academias",$messa,"FROM: AELU<[email protected]>");

Donde
$n4 es la variable q contiene el valor del mail q ha sido pasado por el formulario
Lo demás se sobreentiende.

Suerte

Elwata
  #4 (permalink)  
Antiguo 30/09/2005, 11:11
 
Fecha de Ingreso: septiembre-2005
Mensajes: 94
Antigüedad: 18 años, 6 meses
Puntos: 0
Información

Agradezco vuestras respuestas, pero todavía sigo con una duda.
Mi problema es que en el email que recibe el usuario para activar la cuenta, hay un link. ¿A dónde debe llevar ese link? ¿Qué variables hay que pasar para que se active la cuenta? ¿Deben ser variables de sesión o cómo son?
Si hay algún manual, o algún procedimiento estándar que explique esto, os agradecería que me lo dijérais

Muchas gracias por todo,
Un saludo
  #5 (permalink)  
Antiguo 30/09/2005, 11:20
Avatar de yoseman  
Fecha de Ingreso: diciembre-2003
Ubicación: Alicante (Spain)
Mensajes: 471
Antigüedad: 20 años, 4 meses
Puntos: 5
Se trata básicamente de lo siguiente:

Al registro de usuario tu insertas un registro con un nuevo usuario pero en un campo de tipo booleano que sirve para distinguir si el proceso de registro finalizó o no(es decir si el usuario pincho en el link del email) debes activarlo en primera instancia a FALSE. Es decir rellenas todos los campos del usuario tras el registro(que no la confirmación) pero dejas en default '0' el campo de confirmacion_mail(por ejemplo)

Por otra parte cuando el usuario te envia los datos de registro tienes que crear una cadena codificada pero con la garantia de que no se pueda repetir para dos peticiones paralelas en el tiempo. Se suele hacer un md5 de uniqid de la ip del usuario:

Código PHP:
function getRealIP()
{
   
   if( 
$_SERVER['HTTP_X_FORWARDED_FOR'] != '' )
   {
      
$client_ip =
         ( !empty(
$_SERVER['REMOTE_ADDR']) ) ?
            
$_SERVER['REMOTE_ADDR']
            :
            ( ( !empty(
$_ENV['REMOTE_ADDR']) ) ?
               
$_ENV['REMOTE_ADDR']
               :
               
"unknown" );
   
      
// los proxys van añadiendo al final de esta cabecera
      // las direcciones ip que van "ocultando". Para localizar la ip real
      // del usuario se comienza a mirar por el principio hasta encontrar
      // una dirección ip que no sea del rango privado. En caso de no
      // encontrarse ninguna se toma como valor el REMOTE_ADDR
   
      
$entries split('[, ]'$_SERVER['HTTP_X_FORWARDED_FOR']);
   
      
reset($entries);
      while (list(, 
$entry) = each($entries))
      {
         
$entry trim($entry);
         if ( 
preg_match("/^([0-9]+.[0-9]+.[0-9]+.[0-9]+)/"$entry$ip_list) )
         {
            
// http://www.faqs.org/rfcs/rfc1918.html
            
$private_ip = array(
                  
'/^0./',
                  
'/^127.0.0.1/',
                  
'/^192.168..*/',
                  
'/^172.((1[6-9])|(2[0-9])|(3[0-1]))..*/',
                  
'/^10..*/');
   
            
$found_ip preg_replace($private_ip$client_ip$ip_list[1]);
   
            if (
$client_ip != $found_ip)
            {
               
$client_ip $found_ip;
               break;
            }
         }
      }
   }
   else
   {
      
$client_ip =
         ( !empty(
$_SERVER['REMOTE_ADDR']) ) ?
            
$_SERVER['REMOTE_ADDR']
            :
            ( ( !empty(
$_ENV['REMOTE_ADDR']) ) ?
               
$_ENV['REMOTE_ADDR']
               :
               
"unknown" );
   }
   
   return 
$client_ip;
   
}
$user_ip=getRealIP();
$pass_fiable=md5(uniqid($user_ip)) 
Bien una vez que se supone que el script que recibe el registro obtiene esta clave única(es decir una cadena que sabemos sería casí imposible que se repitiera), lo que tenemos que hacer es insertar una relación de esa clave única con el identificador de usuario que activaría.

Es decir activamos todos los datos de usuario que procediesen, dejamos el campo booleano de confirmacion_mail a false de momento, insertamos un registro en nuestra tabla de confirmación que contiene nuestra clave única y el identificador de usuario que activaría.

Además enviamos un mail al usuario, con la dirección del script que realizaría la activación pero incluyendo en la dirección un paso de la clave única por query string.

Y luego en el script que recibe la confirmación, simplemente activamos el usuario cuya clave coincida con la pasada por query string(desde el mail del usuario). Eso sería con una consulta select y un update.

Y bueno de esta forma sabemos que la clave que mandamos no se puede repetir, y que al menos si el usuario confirma es porque se tomó la molestía de abrir el correo que indicó como suyo y pincha en el link de confirmación.

Obviamente se requiere una tabla suplementaria de confirmación de usuario con un campo para la clave única y otro para el id del usuario, y tambien se requiere un campo más para la tabla de usuarios que tengas, para meter el estado de la cuenta.


Salu2 ;) (espero que se me entienda y suerte)
__________________
[+]
[+]

Última edición por yoseman; 30/09/2005 a las 11:26
  #6 (permalink)  
Antiguo 30/09/2005, 11:25
 
Fecha de Ingreso: septiembre-2005
Mensajes: 94
Antigüedad: 18 años, 6 meses
Puntos: 0
¡¡¡¡Muchísimas gracias!!!!
Precisamente es eso lo que quería saber.

¡¡Un saludo y gracias de nuevo!!
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 17:14.