I'm trying to access POST parameters after submitting a login form with passport. My form is as follows:
<form method="post">
<input name="username">
<input name="password">
<input type="checkbox" name="remember" value="1">
<input type="submit">
</form>
The (working) express route/callback:
app.post(
'/login',
passport.authenticate('local', {
failureRedirect: '/login',
failureFlash: true,
badRequestMessage: 'Please enter your account credentials to login.'
}),
function(req, res) {
console.log(req.param('remember'));
if(req.isAuthenticated(req, res)) {
res.redirect('/dashboard');
} else {
var errors = req.flash('error');
if(errors) {
assign['errors'] = errors;
}
res.render('login.html', {errors: errors});
}
}
);
Login works fine, everything cool. BUT: req.param('remember') is always undefined. When I remove the passport.authenticate() part, check the checkbox in my form and submit the form console correctly logs 1.
So how can I access the POST parameters when I'm also using passport.authenticate()?
Haven't used passport so far but here are two things that might cause your problem
1. Your form doesn't have an action attribute
Therefore the form doesn't know where to send the data. Try the following
<form method="post" action="/login">
<input name="username">
<input name="password">
<input type="checkbox" name="remember" value="1">
<input type="submit">
</form>
2. POST variables in express are attached to the req.body object
So instead of
console.log(req.param('remember'));
use
console.log(req.body.username);
Make sure you have the bodyParser in your express config.
req.param is used when you want to access dynamic routes
app.get('/login/:user', function(req, res) {
console.log(req.params.user)
})
// GET /login/john => 'john'