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 originalGetSQLValueString($numero_secreto, "int"),
cámbienla por:
Código php:
Ver originalGetSQLValueString($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<input type="hidden" name="timestamp" id="timestamp" /> <input type="hidden" name="email" id="email" /> <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 originalGetSQLValueString($_POST['password'], "text"),
por:
Código php:
Ver originalGetSQLValueString
(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.