3

パスポートでログインフォームを送信した後、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 パラメーターにアクセスできますか?

4

1 に答える 1

1

これまでパスポートを使用していませんが、問題を引き起こす可能性のある2つのことがあります

action1.フォームに属性がありません

したがって、フォームはデータの送信先を知りません。以下を試してください

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

2. Express の 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'
于 2013-01-09T18:59:29.613 に答える