I have a really annoying problem with Node js, express 4 and passport. I have tried all options I can think of, but still no solution. Couldn't find a solution from other posts for this problem.
Code:
app.post('/login', function(req, res, next) {
console.log(req.body.user_email);
console.log(req.body.user_password);
passport.authenticate('local', function(err, user, info) {
console.log(info);
...
The problem is that for some reason, passport does not get the credentials and says at the console.log(info) "Missing credentials", although when the username and password are logged above they are correct. The local strategy should also be configured properly:
passport.use(new LocalStrategy ({
usernameField: 'user_email',
passwordField: 'user_password',
},
function(username, password, done) {
console.log(username);
console.log(password);
...
The "function(username, password, done)" never gets run, because of the "Missing credentials".
The funny part is that from another html/ejs page where a call for authentication is made with:
app.post('/login_user', passport.authenticate('local', { successRedirect: '/loginSuccess', failureRedirect: '/loginFailure' }));
the problem does not exist.
Does anybody know what I am missing here?!?!
Thanks!
Here I'm using Postman to demonstrate your issue:
This is not good
Just the output that I want
Although this might not be related a bit, but the same problem occurs if I didn't do this.
req and res parameters
before initiating the passport.authenticatepassport.authenticate
, finish it with (req, res)
You need (req, res)
at the end of your function, as so:
router.post('/signup',
(req, res, next) => passport.authenticate('whatever-your-strategy-name-is', function(err, user, info) {
// Just to see the sample expected output
res.send(JSON.stringify(info)).status(200)
})(req, res)
);
In standard familiar JS, it looks like this.
router.post('/signup', function (req, res, next) {
passport.authenticate('whatever-your-strategy-name-is', function(err, user, info) {
// Just to see the sample expected output
res.send(JSON.stringify(info)).status(200)
})(req, res) // passport.authenticate ends here
})
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With