如何访问node.js护照认证的POST数据?

时间:2013-01-09 13:35:44

标签: node.js express passport.js

我在提交带护照的登录表单后尝试访问POST参数。我的表格如下:

<form method="post">
    <input name="username">
    <input name="password">
    <input type="checkbox" name="remember" value="1">
    <input type="submit">
</form>

(工作)快速路线/回调:

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});
        }
    }
);

登录工作正常,一切都很酷。但是:req.param('remember')始终为undefined。当我删除passport.authenticate()部分时,选中我表单中的复选框并正确提交表单控制台记录1

那么当我还使用passport.authenticate()时如何访问POST参数?

1 个答案:

答案 0 :(得分:1)

到目前为止还没有使用过护照,但这有两件事可能会导致你的问题

<强> 1。您的表单没有action属性

因此表单不知道将数据发送到何处。请尝试以下

<form method="post" action="/login">
  <input name="username">
  <input name="password">
  <input type="checkbox" name="remember" value="1">
  <input type="submit">
</form>

<强> 2。快递中的POST变量附加到req.body对象

所以而不是

console.log(req.param('remember'));

使用

console.log(req.body.username);

确保您的快速配置中有bodyParser

当您想要访问动态路由时使用

req.param

app.get('/login/:user', function(req, res) {
  console.log(req.params.user)
})

// GET /login/john => 'john'