Estoy tratando de agregar la función de restablecimiento de contraseña. El usuario ingresa el nombre de usuario, el correo electrónico y el nombre completo, cuando estos valores coinciden con los datos de la base de datos, se cambia la contraseña; de lo contrario, se muestra un error. Esto es lo que estoy haciendo-
app.post("/reset",function(req,res){ User.findByUsername(req.body.username).then(function(sanitizedUser){ if (sanitizedUser){ sanitizedUser.setPassword(req.body.password, function(){ sanitizedUser.save(); req.flash("success","password resetted"); res.redirect("/login"); }); } else { req.flash("error","User doesnt exist"); res.redirect("/reset"); } },function(err){ console.log(err);res.redirect("/"); }); }); Pero quiero comparar algo más que el nombre de usuario, también quiero comparar el correo electrónico y el nombre del usuario. Y cuando agrego User.find({username:req.body.username},{email:req.body.email},{name:req.body.name}) e ingresa algunos datos incorrectos, la página sigue recargando en lugar de mostrar un error. ¿Qué cambios debo hacer para hacer eso? Ayuda por favor.
Estoy usando express, nodejs, mongodb
Tienes un bucle de redirección .
En el caso de !sanitizedUser , redirige a la misma página res.redirect('/reset') .
Esto está causando que su página siga recargando.
Deberías cambiar la línea:
res.redirect('/reset')
a
res.status(500).send('Some useful error message')
if(req.body.username && req.body.email && req.body.name && req.body.password){ //add logic to hash password below let hashedPassword = req.body.password; Model.findOneAndUpdate( { username : req.body.username, email : req.body.email, name : req.body.name }, { "$set" : { password : hashedPassword } }, //if below option "new" is set to true, call back will return new document else it will return old document beforeupdate { new : true }, //call back function(err, person){ if(err){ //err found res.send(err); } else{ // no error and also person exists res.send('Password successfully updated..'); } } ); } else{ res.send('Please provide all details..'); }