Foros del Web » Programando para Internet » PHP »

activacion de usuarios via mail

Estas en el tema de activacion de usuarios via mail en el foro de PHP en Foros del Web. hola como estan? tengo un sistema para registrar usuarios en un sitio... el sistema anda perfectamente pero ahora me gustaria agregarle la activacion por mail... ...
  #1 (permalink)  
Antiguo 15/07/2006, 00:19
Avatar de JAK^  
Fecha de Ingreso: octubre-2005
Ubicación: ^^CaMiNiTo Al CoSTaDo DeL
Mensajes: 850
Antigüedad: 12 años, 1 mes
Puntos: 4
Pregunta activacion de usuarios via mail

hola como estan? tengo un sistema para registrar usuarios en un sitio... el sistema anda perfectamente pero ahora me gustaria agregarle la activacion por mail... es decir enviar un mail con el link para activar la cuenta.... se como enviar el mail y demas .... lo ke no se es ke hace el link ese.... osea ke manera es la mas segura y correcta de hacer esto??? yo habia pensado ke el link envie una variable por get por ejemplo $id_activ...

y en la pagina ver kien tiene ese id y activarlo pero no se ke tan seguro es...

es asi cmo funciona eso??????


salu2 muchas gracias por su atencion
__________________
hola . . .
  #2 (permalink)  
Antiguo 15/07/2006, 10:08
Avatar de JAK^  
Fecha de Ingreso: octubre-2005
Ubicación: ^^CaMiNiTo Al CoSTaDo DeL
Mensajes: 850
Antigüedad: 12 años, 1 mes
Puntos: 4
estube buscando en google y el unico ejemplo ke encontre es asi como les comente..... lo ke kiero saber si es lo mas conveniente o hay maneras mass confiables ... saludos
__________________
hola . . .
  #3 (permalink)  
Antiguo 15/07/2006, 10:31
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 11 años, 11 meses
Puntos: 5
Buenas, podrías hacerlo así. Al registrarse, le asignás al usuario un id (común y corriente) como tenías pensado. Pero, además, le generás una clave aleatoria, que también grabás en la tabla de usuarios. En el link que le mandás, le pasás como parámetros, por ejemplo: http://dominio.com/tu_script.php?id_...b5139c2e2705f5

Desde el script, hacés un select de la tabla usaurios para buscar un registro que tenga ese id_usuario y esa clave. Y ahí ya tendrías solucionado el tema. Si yo como usuario me pusiera a jugar con los id_usuario (cambiándolos para ver qué pasa), no conseguiría mayor cosa (a menos que también "embocara" justo alguna clave, lo que me parece altísimamente improbable).

¿Cómo armás la clave? Usando un random y aplicándole un md5 para encriptarlo. En realidad, con un random ya alcanzaría, pero encriptándolo tenés una clave aún más difícil de predecir.

El código para generar la clave podría ser algo tan simple como:

Código PHP:
$clave md5(mt_rand());
echo 
$clave
Al momento de activar la cuenta, entonces, sólo validás ambos datos y pasás el flag de la tabla que indica que el usuario está activo a 1 (si estás usando flags, que me parece lo más cómodo en este caso).

Espero que te sirva o te de alguna idea.

Suerte
Califa
  #4 (permalink)  
Antiguo 15/07/2006, 10:36
Avatar de JAK^  
Fecha de Ingreso: octubre-2005
Ubicación: ^^CaMiNiTo Al CoSTaDo DeL
Mensajes: 850
Antigüedad: 12 años, 1 mes
Puntos: 4
graciasss!!! me parece perfecto!... el tema de generar los codes aleatorios no hay problema si lo se hacer pero eso de md5 no se ke es me podrias dar un brebe pantallaso de ke se trata??... graciass
__________________
hola . . .
  #5 (permalink)  
Antiguo 15/07/2006, 11:10
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 11 años, 11 meses
Puntos: 5
JAK^, md5 es un algoritmo que encripta un string generando otro string de 32 caracteres con valores hexadecimales (0-9, más a-f, o sea, 0-f). Es decir que por cada uno de los 32 caracteres hay 16 posibilidades, lo que da una cifra de combinaciones posibles astronómicas. (16 ^ 32; si fueran 10 ^32 sería un 1 seguido de 32 ceros así que calculá...)

Un mismo "input" siempre da el mismo "output".

Por ej, el "hash" (el resultado de la encriptación) de "a" es:

0cc175b9c0f1b6a831c399e269772661

El de "b" es:

92eb5ffee6ae2fec3ad71c777531578f

Si te fijás, a pesar de ser caracteres correlativos no guardan ninguna relación (al menos aparente), por lo que deducir el valor original o encontrar alguna pista es prácticamente imposible.

Una característica del md5 (y otros algoritmos similares) es que no son reversibles. Aún teniendo el código del algoritmo (hay muchas implementaciones que son abiertas, como la de php, alguna que vi en javascript, etc), es en la práctica imposible ("infeasible", así leí siempre en inglés, no sé cuál será la mejor traducción), obtener el "input" original a partir del "output", porque haría falta una cantidad de cálculos monstruosa.

Para más datos, chequeá lo que dice el manual de php
http://ar2.php.net/manual/es/function.md5.php
o buscá en google md5.

Suerte
Califa
  #6 (permalink)  
Antiguo 15/07/2006, 11:50
Avatar de DarkskullDA  
Fecha de Ingreso: julio-2006
Mensajes: 698
Antigüedad: 11 años, 5 meses
Puntos: 13
ya q andamso en esto :P, tengo una duda,

encripto la clave y la guardo(encriptada) luego en el link al mail le mando su id y la clave(encriptada)

y luego de ahi O.o???

no entendi muy bien q hace el link, es decir no uso flags, como se podria hacer??

saludos XD
y muy wena explicacion :)
  #7 (permalink)  
Antiguo 15/07/2006, 12:41
Avatar de JAK^  
Fecha de Ingreso: octubre-2005
Ubicación: ^^CaMiNiTo Al CoSTaDo DeL
Mensajes: 850
Antigüedad: 12 años, 1 mes
Puntos: 4
gracias por la explicacion... pero la veadd ke no logre entender bien puesto ke... hasta donde yo sabia la idea de encriptar algo es poder desencriptarlo despues.... pero si no hay manera de conseguir el input con el output no entiendo bien como usaria esto... puesto ke lo uniko ke me kedaria seria una cadena de caracteres larga??? porfa una ayudita para interpretar mejor la aplicacion de esto
__________________
hola . . .
  #8 (permalink)  
Antiguo 15/07/2006, 13:32
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 11 años, 11 meses
Puntos: 5
Cita:
gracias por la explicacion... pero la veadd ke no logre entender bien puesto ke... hasta donde yo sabia la idea de encriptar algo es poder desencriptarlo despues.... pero si no hay manera de conseguir el input con el output no entiendo bien como usaria esto... puesto ke lo uniko ke me kedaria seria una cadena de caracteres larga??? porfa una ayudita para interpretar mejor la aplicacion de esto
No siempre. En este caso, la idea de la encriptación es que sólo el usuario conozca su clave original, y nadie más, ni siquiera alguien con acceso a la base de datos. En la base guardás la contraseña encriptada y al recibir la contraseña del usuario, la encriptás y la comparás contra la que está guardada en la base. Si son iguales, la contraseña es válida.
Este sistema se usa en muchos "logins" (con md5, sha1 o algún otro algoritmo similar). Por eso, por ejemplo, en muchos sitios si perdés la clave te generan una nueva temporal y te permiten después elegir otra. (Pero no te mandan de vuelta la clave que originalmente ingresaste al registrarte). Es que el sistema no puede reconstruir la clave original.

Para que los datos se encripten durante la transferencia y poder desencriptarlos al llegar al destino se usan otros métodos (otros algoritmos, calculo, y también SSL - https ). Esto es para evitar que los datos sean interceptados por un "sniffer" mientras van desde el cliente al servidor.

Cita:
no entendi muy bien q hace el link, es decir no uso flags, como se podria hacer??
El link apunta a un script que lo único que hace es activar usuarios, ok?. Cuando un usuario se registra, grabás en la tabla de usuarios todos los datos que quieras (nombre, clave elegida, direccion, id_usuario, etc, etc), más una clave única aleatoria y un flag (una variable o un campo en este caso) que indica si el usuario está activo o no que tiene un valor generalmente booleano. True o false, o 1 ó 0.

Entonces, al registrarse, además de los datos habituales, grabás, pongamos, flagActivo = 0 (siempre arranca en 0 porque no está activo) y la clave. Después de grabar estos datos, mandás un mail al usuario con un link que apunte al script de activación y le pasás como parámetros el id_usuario y la clave.

En ese script, te fijás si en la tabla hay algún usuario que tenga ese mismo id_usuario y esa clave. Si es así, significa que el usuario está pidiendo que se le de el alta. Nadie más puede pedirlo por él, ni él puede hacerlo por otro usuario (a menos que se conozcan las claves). Ok, entonces si el pedido es válido (los datos coinciden con los de un usuario, lo único que hacés es cambiar el valor del campo flagActivo de ese registro a 1 y a partir de ahí vas a saber siempre que ese usuario está activo. (Después de hacer click en el link lo podés mandar al login o iniciar la sesión directamente y redireccionarlo a la página de inicio, como quieras).

En el login siempre chequeás, además de nombre y contraseña, que flagActivo esté en 1. Si el nombre y la contraseña son válidos, pero no está activo, es porque el usuario nunca siguió el link que le mandaste. Entonces, le mostrás un recordatorio de que al registrarse se le envió un mail con un link para activarse como usuario, y que tiene que cumplir ese procedimiento para poder ingresar. (este sistema se usa más que nada para asegurarse de que al momento de registrarse los usuarios dejen como email una dirección que realmente exista, a la que tengan acceso)

Suerte
Califa
  #9 (permalink)  
Antiguo 15/07/2006, 13:59
Avatar de JAK^  
Fecha de Ingreso: octubre-2005
Ubicación: ^^CaMiNiTo Al CoSTaDo DeL
Mensajes: 850
Antigüedad: 12 años, 1 mes
Puntos: 4
mas claro imposible muchas gracias muy gentil!!!! pongo enpractica todo esto
__________________
hola . . .
  #10 (permalink)  
Antiguo 15/07/2006, 14:43
Avatar de DarkskullDA  
Fecha de Ingreso: julio-2006
Mensajes: 698
Antigüedad: 11 años, 5 meses
Puntos: 13
perfecto :D!!

grax XD
  #11 (permalink)  
Antiguo 15/07/2006, 16:50
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 11 años, 11 meses
Puntos: 5
No hay de qué.

Suerte
Califa
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 19:59.