Ver Mensaje Individual
  #20 (permalink)  
Antiguo 19/09/2009, 13:06
Avatar de juaniquillo
juaniquillo
Colaborador
 
Fecha de Ingreso: noviembre-2005
Ubicación: San Juan, Puerto Rico
Mensajes: 5.745
Antigüedad: 19 años
Puntos: 281
Respuesta: Olvide contraseña con Dreamweaver

Lo siento chicos. Como siempre, la cantidad exorbitante de trabajo que tengo no me había dejado entrar al foro.

Antes de empezar, me di cuenta que el número secreto no se estaba almacenando correctamente en la base de datos. Debería ser el Timestamp, guión y el número. El problema está que el campo esta siendo validado como integer, no como text. En la página que hicimos hagan un cambio en el insert, en la parte que dice:

Código php:
Ver original
  1. GetSQLValueString($numero_secreto, "int"),

cámbienla por:

Código php:
Ver original
  1. GetSQLValueString($numero_secreto, "text"),

El campo 'codigo_recordar_pass' en la base de datos también tiene que ser 'varchar', aunque yo ya lo tenía así.

Lo que nos queda es crear la página 'nuevo_pass.php'. En mi ejemplo yo la cree en la raiz de mi website ya que ahí estoy enviando al usuario (mipagina.com/nuevo_pass.php). Ahora tenemos que recibir la variable enviada desde el email y verificar si existe. Para eso las funciones de DW nos sirven. Creamos un recordset para recibir la variable id:



Después hacemos un formulario donde el usuario pueda poner su nueva contraseña si el id es correcto:



y lo mostramos si el recordset no está vacío. Para esto escogemos el formulario. yo uso el 'code inspector' para tener más precisión:



Una ves escogido el formulario vamos al tab de 'Data' y escogemos 'show if recordset not empty':



Solo tenemos un recordset en la página así que escogemos ese y le damos ok. Ahora podemos mostrar un mensaje cuando el recorset esté vacío. Para eso escribimos el mensaje, lo escogemos y hacemos lo que hicimos arriba, pero esta vez escogemos 'show if recordset empty'. En mi caso se ve así:



Ahora pueden probar lo que tenemos. Si ven la página sola saldrá el mensaje. Si le agregan '?id=codigosecreto' (sustituyan 'numero secreto' por uno de la base de datos. Un ejemplo:

Código:
nuevo_pass.php?id=1253988188-59617
Así se mostrará el formulario.

Ahora, podemos hacer el update fácilmente con este formulario pero creo que debemos hacerlo mas seguro para que nadie haga un update directo (llámenme paranoico). Creamos algunos campos ocultos con información del recordset. son estos: email y número secreto:

Código html:
Ver original
  1. <input type="hidden" name="timestamp" id="timestamp" />
  2. <input type="hidden" name="email" id="email" />
  3. <input type="hidden" name="numerosecreto" id="numerosecreto" />



Ahora arrastramos los valores del recordset a su respectivos respectivos campos:





También, al campo de donde el usuario escribirá la contraseña yo la llamo 'password'. Entonces hacemos el update a la tabla de usuario para después alterarlo un poco:



Ponen al campo pass de la base de datos igual al campo password del formulario y al campo email de la base de datos igual al campo email del formulario. También escojan email como' primary key'. También envíen al usuario a otra pagina cuando se haga el update, En esa página se puede poner un mensaje de confirmación:



Ya con esto sólo el sistema funciona. Lo próximo es hacer unas modificaciones al update para hacerlo un poco mas seguro.

------------------------------------------------


(El próximo cambio es por si acaso están encryptando la contraseña usando md5. NO LO HAGAN SI NO ESTAN USANDO MD5 AL MOMENTO DE ALMACENAR LA CONTRASEÑA POR PRIMERA VEZ!!!)

No se si están usando md5 para encryptar sus contraseñas (algo bastante recomendable), pero por si acaso les digo donde hacerlo. Cambien:

Código php:
Ver original
  1. GetSQLValueString($_POST['password'], "text"),

por:

Código php:
Ver original
  1. GetSQLValueString(md5($_POST['password']), "text"),


------------------------------------------------

En el próximo y último mensaje haré unos cambios al update para hacerlo más seguro. Me dicen si tienen algún problema hasta ahora.
__________________
Por fin.. tengo algo parecido a un blog
Y por lo visto ya estoy escribiendo...