No se puede restablecer la contraseña Node.js

editar 1

Troncos

Sat Jan 13 2018 01:48:56 GMT+0000 (GMT): GET /users/reset-password Sat Jan 13 2018 01:49:01 GMT+0000 (GMT): POST /users/reset-password Sat Jan 13 2018 01:49:02 GMT+0000 (GMT): GET /users/reset-password Sat Jan 13 2018 01:49:06 GMT+0000 (GMT): GET /users/reset-password/d36d4577c0b761a96cbcefd3fd96c3c09ab033b5 Sat Jan 13 2018 01:49:06 GMT+0000 (GMT): GET /users/reset-password/301 Sat Jan 13 2018 01:49:06 GMT+0000 (GMT): GET /users/reset-password Sat Jan 13 2018 01:49:24 GMT+0000 (GMT): POST /users/reset-password Sat Jan 13 2018 01:49:25 GMT+0000 (GMT): GET /users/reset-password Sat Jan 13 2018 01:49:31 GMT+0000 (GMT): GET /users/reset-password/3297b0be778c4e05964e58d1648174af14688f69 Sat Jan 13 2018 01:49:31 GMT+0000 (GMT): GET /users/reset-password/301 Sat Jan 13 2018 01:49:31 GMT+0000 (GMT): GET /users/reset-password 

Mis fichas parecen caducar de inmediato, sin errores, en los registros.

También se modificó return res.redirect('/users/new-password'); para return res.redirect(302, '/users/new-password');

Pregunta original

Estoy implementando un restablecimiento de contraseña y parece que no puedo restablecer la contraseña.

Aquí hay un GIF del tema.

No estoy muy seguro de dónde me voy mal aquí.

Aquí hay algunas rutas.

 router.get('/users/reset-password/:token', function(req, res) { User.findOne({ resetPasswordToken: req.params.token, resetPasswordExpires: { $gt: Date.now() } }, function(err, user) { if (!user) { req.flash('error', 'Password reset token is invalid or has expired.'); return res.redirect('/users/reset-password') } res.redirect(301, 'reset-password', { user: req.user }); }); }); router.get('/users/new-password', function(req, res) { res.render('new-password', { pageTitle: 'New Password', User: req.user }); }); router.post('/users/reset-password/:token', function(req, res, next) { async.waterfall([ function(done) { User.findOne({ resetPasswordToken: req.params.token, resetPasswordExpires: { $gt: Date.now() } }, function(err, user) { if (!user) { req.flash('error', 'Password reset token is invalid or has expired.'); return res.redirect('back'); } user.password = req.body.password; user.resetPasswordToken = undefined; user.resetPasswordExpires = undefined; user.save(function(err) { req.logIn(user, function(err) { done(err, user); }); }); }); }, function(user, done) { nodemailer.createTestAccount((err, account) => { // create reusable transporter object using the default SMTP transport if (process.env.NODE_ENV === 'production') { transporter = nodemailer.createTransport({ host: "smtp.sendgrid.net", port: 587, auth: { user: process.env.SENDGRID_USERNAME, pass: process.env.SENDGRID_PASSWORD, } }); } else { transporter = nodemailer.createTransport({ host: "smtp.ethereal.email", port: 587, auth: { user: '[email protected]', pass: 'A4W9HF2WbhAav263VM', } }); } // setup email data with unicode symbols let mailOptions = { from: 'password.reset' + process.env.GLOBAL_EMAIL || '[email protected]', // sender address to: user.email, // list of receivers subject: 'Your password has been changed', // Subject line text: 'Hello,\n\n' + 'This is a confirmation that the password for your account ' + user.email + ' has just been changed.\n' // output }; // send mail with defined transport object transporter.sendMail(mailOptions, (err) => { req.flash('success', 'Success! Your password has been changed.'); done(err); }); }); } ], function(err) { res.redirect('/'); }); }); 

y aquí está la nueva vista de contraseña

 {{> header }} 
{{> flash }}
Reset Password
{{> footer }}

Creo que he pasado todo bien, pero algo va mal en alguna parte 🙁

También mis fichas parecen caducar de inmediato.

Cualquier ayuda aquí será apreciada.

Gracias.