NodeJs :- Getting "missing credentials" error while using local passport
I have made changes to the code. You have used passport-local-mongoose
wrongly here.
//register if (errors.length > 0) { res.render('register', { errors, name, username, password, password2 }); } else { User.findOne({ username: username }).then(user => { if (user) { errors.push({ msg: 'username already exists' }); res.render('register', { errors, name, username, password, password2 }); } else { const newUser = new User({ name, username, password }); User.register(newUser, req.body.password, function(err, user){ console.log(req.body) if(err){ console.log(err); return res.render("register", {error: err.message}); } passport.authenticate("local")(req, res, function(){ req.flash("success", "Successfully Signed Up! Nice to meet you " + req.body.name); res.redirect('/users/login'); }); }); } }); } // forgot password router.post('/forgot', function(req, res, next) { async.waterfall([ function(done) { crypto.randomBytes(20, function(err, buf) { var token = buf.toString('hex'); done(err, token); }); }, function(token, done) { User.findOne({ username: req.body.username }, function(err, user) { if (!user) { req.flash('error', 'No account with that username address exists.'); return res.redirect('/users/forgot'); } user.resetPasswordToken = token; user.resetPasswordExpires = Date.now() + 3600000; // 1 hour user.save(function(err) { done(err, token, user); }); }); },//reset tokenasync.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'); } if(req.body.password === req.body.confirm) { user.setPassword(req.body.password, function(err) { user.resetPasswordToken = undefined; user.resetPasswordExpires = undefined; user.save(function(err) { req.logIn(user, function(err) { done(err, user); }); }); }) } else { req.flash("error", "Passwords do not match."); return res.redirect('back'); } }); },
I got a changepassword route using passport. Maybe its useful for you. Here it is:
router.post('/changepassword', passport.authenticate('jwt', { session: false }), (req, res) => { User.findOne({ username: req.user.username }) .then(user => { if (!user) { return res.status(404).json({ success: false }); } else if (req.body.password !== req.body.confirm_password) { return res.status(404).json({ msg: "Wachtwoorden komen niet overeen", success: false }); } bcrypt.genSalt(10, (err, salt) => { bcrypt.hash(req.body.password, salt, (err, hash) => { user.password = hash; user.save().then(user => { return res.status(201).json({ success: true, msg: "Wachtwoord veranderd" }); }) }); }); }) .catch(err => { console.log(err) })})