Estoy en el paso final de mi flujo de trabajo de restablecimiento de contraseña y estoy experimentando un problema extraño en el que el código se ejecuta correctamente, imprime mi documento de artist y las palabras "Contraseña reenviada con éxito".
Luego, sin detenerse, se ejecuta por segunda vez e imprime null para el artista y muestra el error "El token de restablecimiento de contraseña no es válido o ha caducado".
Parte confusa La nueva contraseña no se acepta, pero las variables resetPasswordToken y resetPasswordExpires están configuradas en null , al igual que la parte de éxito de las solicitudes de declaración if.
Función de restablecimiento de contraseña
const bcrypt = require('bcrypt'); module.exports.submitNewPassword = async (req, res) => { const slidedHeaderToken = req.headers.referer.slice(-40); const artist = await Artist.findOne({ resetPasswordToken: slidedHeaderToken, resetPasswordExpires: { $gt: Date.now() } }); console.log(artist); if (!artist) { req.flash('error', "Password reset token is invalid or has expired"); res.render('artists/reset') } else { const hashedPassword = bcrypt.hashSync(req.body.password, 12) artist.password = hashedPassword; artist.resetPasswordToken = null; artist.resetPasswordExpires = null; artist.save(); console.log("Successfully resubmitted password"); req.flash('success', "Successfully resubmitted password, please login with your updated credentials"); res.redirect('login'); } }Ruta
const passport = require('passport'); router.route('/reset/:token') .get( artists.renderPasswordReset) .post( catchAsync (artists.submitNewPassword ))En mi aplicación, los artistas son usuarios, pero no estoy seguro si debo aclarar eso en algún lugar para el pasaporte o bcrypt.
¿Alguna idea de qué está pasando con mi código y por qué 2/3 de él funciona?