7-Seven-Up / megastore-backend

MIT License
1 stars 0 forks source link

Recuperar contraseña #4

Open EzeSosa opened 3 weeks ago

EzeSosa commented 3 weeks ago

Como cliente quiero recuperar mi contraseña en caso de olvido para acceder nuevamente a mi cuenta.

Criterios de aceptación:

ValeLattanzi commented 1 week ago

Consulto, manejo la validez del mail con un token? Y que del front se pueda reenviar según un timer?

Fedesan14 commented 1 week ago

@ValeLattanzi

El funcionamiento de esto debería ser parecido a la activación de la cuenta. Esto es, se debería generar un token (puede ser un UUID) que esté asociado al usuario y enviarle al cliente una URL que lo envía a una página del front pasandole de alguna manera el token que se generó. En esta página el usuario va a escribir la nueva contraseña dos veces (por seguridad de que lo escriba bien la primera vez), y luego el front cuando el usuario le de a "Guardar contraseña" o algo aprecido, le tiene que pegar al backend con la nueva contraseña y con el token que le enviamos por correo electrónico al cliente. De esta manera nosotros podemos confirmar que el token le corresponde a ese usuario que está intentando guardar, si es el mismo token podemos confirmar que es el mismo cliente el que está actualizando.

Ahora, si queremos agregar un tiempo máximo el cual el cliente puede reestablecer la contraseña, podemos agregar un atributo mas en el usuario que sea "RESTORE_PASSWORD_TOKEN_CREATED_AT" donde al guardar el token, setemos ese atributo con la fecha y hora actual, luego en la petición en la que el front le pega al back con la nueva contraseña y el token, podemos chequear el tiempo que paso desde ese "RESTORE_PASSWORD_TOKEN_CREATED_AT" y lanzar una excepción si ya pasó el tiempo.

Por último, otra opción posible para restaurar una contraseña es, en vez de mandarle un token al cliente podemos mandarle un OTP (one time password) donde el cliente va a poder ingresar a su cuenta con esa contraseña una unica vez, y desde ahí, actualizar la contraseña sin necesidad de validar ningun token.

Lo dejo a criterio del equipo @martinjcrosetto @EzeSosa @delgadomatias @NicoAntu

ValeLattanzi commented 1 week ago

Joya, porque planteé todo como dijiste, pero no sabía cómo validar la expiración del mail