I am trying to reset password using nodemailer. I am sending a mail to the user mail address with a link to reset password. After clicking on update password link on the page it is throwing the following error:-
throw er; // Unhandled 'error' event
^
Error: Callback was already called.
I can't get what's the error and what is meant by callback is already called?
here is my post request code :-
app.post('/reset/:token', function(req, res) {
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);
});
});
});
// res.redirect('/login');
},
function(user, done) {
var smtpTransport = nodemailer.createTransport('SMTP', {
// host:'smtp.gmail.com',
service: 'Gmail',
auth: {
user: 'myemail',
pass: 'password'
}
});
var mailOptions = {
to: user.email,
from: 'my email',
subject: 'Your password has been changed',
text: 'Hello,\n\n' +
'This is a confirmation that the password for your account ' + user.email + ' has just been changed.\n'
};
smtpTransport.sendMail(mailOptions, function(err) {
done(err);
});
}
], function(err) {
res.redirect('/');
});
});
I am not getting any confirmation mail too on the user email..Thanks in advance
ok, I got the mistake, removing SMTP from nodemailer.createTransport solved the issue. However I am still not getting the flash-message.