diff --git a/auth/auth.controller.ts b/auth/auth.controller.ts
index 3b6284c5f7..8b9d7403db 100644
--- a/auth/auth.controller.ts
+++ b/auth/auth.controller.ts
@@ -184,10 +184,13 @@ export async function setValidationTokenAndNotify(username) {
try {
const usuario = await AuthUsers.findOne({ usuario: username });
if (usuario && usuario.tipo === 'temporal' && usuario.email) {
- usuario.validationToken = new mongoose.Types.ObjectId().toHexString();
- usuario.audit(userScheduler);
- await usuario.save();
-
+ if (!usuario.validationToken || usuario.validationTokenExpiration < new Date()) {
+ // Si no tiene un token de validación o esta vencido, se genera uno nuevo
+ usuario.validationToken = new mongoose.Types.ObjectId().toHexString();
+ usuario.validationTokenExpiration = new Date(Date.now() + 72 * 60 * 60 * 1000); // Expira en 72 horas
+ usuario.audit(userScheduler);
+ await usuario.save();
+ }
const extras: any = {
titulo: 'Recuperación de contraseña',
usuario,
@@ -307,8 +310,9 @@ export async function validateOtpAndResetPassword(username, otpCode, newPassword
export async function reset(token, password) {
try {
const usuario = await AuthUsers.findOne({ validationToken: token });
- if (usuario) {
+ if (usuario && usuario.validationTokenExpiration > new Date()) {
usuario.validationToken = null;
+ usuario.validationTokenExpiration = null;
usuario.password = sha1Hash(password);
usuario.audit(userScheduler);
await usuario.save();
diff --git a/auth/schemas/authUsers.ts b/auth/schemas/authUsers.ts
index 3dc8cb5f54..4afc8c50b5 100644
--- a/auth/schemas/authUsers.ts
+++ b/auth/schemas/authUsers.ts
@@ -27,6 +27,7 @@ export interface IAuthUsers {
lastLogin: Date;
tipo?: String;
validationToken?: String;
+ validationTokenExpiration?: Date;
email?: String;
configuracion?: { [key: string]: any };
disclaimers?: {
diff --git a/modules/mobileApp/auth_routes/autenticacionApp.ts b/modules/mobileApp/auth_routes/autenticacionApp.ts
index ac29cb7614..64be58ef07 100644
--- a/modules/mobileApp/auth_routes/autenticacionApp.ts
+++ b/modules/mobileApp/auth_routes/autenticacionApp.ts
@@ -89,6 +89,8 @@ router.post('/olvide-password', (req, res, next) => {
return res.status(422).send({ error: 'Se debe ingresar una dirección de e-Mail' });
}
const email = req.body.email.toLowerCase();
+ const diaHoy = new Date();
+
return PacienteApp.findOne({ email }, (err, datosUsuario: any) => {
if (err) {
return next(err);
@@ -98,8 +100,8 @@ router.post('/olvide-password', (req, res, next) => {
return res.status(422).send({ error: 'El e-mail ingresado no existe' });
}
- if (!datosUsuario.activacionApp) {
- return res.status(422).send({ error: 'El e-mail ingresado no existe' });
+ if (datosUsuario.restablecerPassword?.fechaExpiracion > diaHoy && datosUsuario.restablecerPassword?.codigo) {
+ return res.status(422).send({ error: 'Ya posee un código de verificación para cambiar su password' });
}
datosUsuario.restablecerPassword.codigo = authController.generarCodigoVerificacion();
diff --git a/modules/mobileApp/controller/AuthController.ts b/modules/mobileApp/controller/AuthController.ts
index 93e08ddb6b..0a57b6cd40 100644
--- a/modules/mobileApp/controller/AuthController.ts
+++ b/modules/mobileApp/controller/AuthController.ts
@@ -9,7 +9,7 @@ import { IPushNotification, sendPushNotification } from './PushClientFCM';
const log = debug('AuthController');
-export const expirationOffset = 1000 * 60 * 60 * 24;
+export const expirationOffset = 1000 * 60 * 60 * 72; // 72 horas
export function verificarCodigo(codigoIngresado, codigo) {
if (codigoIngresado === codigo) {
diff --git a/templates/emails/reset-password.html b/templates/emails/reset-password.html
index c5f5535095..1a19d7829c 100644
--- a/templates/emails/reset-password.html
+++ b/templates/emails/reset-password.html
@@ -191,7 +191,7 @@
Hola {{username}}, has solicitado el cambio de contraseña de la cuenta de ANDES App.
- El código para el cambio de contraseña estará disponible sólo por 24 horas.
+ El código para el cambio de contraseña estará disponible sólo por 72 horas.
diff --git a/utils/roboSender/index.ts b/utils/roboSender/index.ts
index ed1d44924d..d0ea4a343b 100644
--- a/utils/roboSender/index.ts
+++ b/utils/roboSender/index.ts
@@ -55,7 +55,7 @@ export function sendEmail(data: IEmail, options: any = {}) {
createdAt: moment().toDate(),
updatedAt: moment().toDate(),
- expiredAt: moment().add(1, 'd').toDate(),
+ expiredAt: moment().add(3, 'd').toDate(),
scheduledAt: options.scheduledAt ? options.scheduledAt : moment().toDate(),
tries: 0,
});