web-dev-qa-db-ja.com

Passport Strategyの「完了」コールバック関数とは

私はnode.jsおよびexpress.js noobです。この質問はばかげているように見えるかもしれませんが、私は本当に混乱しています。

passport を使用して Local Strategry 認証を設定しようとしています。公式ドキュメントに示されているように、次のコードでこのローカル戦略を理解できます。

passport.use(new LocalStrategy(
  function(username, password, done) {
    User.findOne({ username: username }, function (err, user) {
      if (err) { return done(err); }
      if (!user) { return done(null, false); }
      if (!user.verifyPassword(password)) { return done(null, false); }
      return done(null, user);
    });
  }
));

私の混乱は、doneコールバック関数に関するものです。公式ドキュメントがルートハンドラーでミドルウェアとして使用するこのローカル戦略を示している場合、このdoneコールバックの関数パラメーターを渡す必要はありません。

app.post('/login', 
  passport.authenticate('local'),
  function(req, res) {
    res.redirect('/');
  });

関数パラメーターを指定しない場合、このdoneコールバック関数はnullになりませんか?そうでない場合、そのdoneコールバック関数は何であり、どのプロセスがこのdoneコールバック関数で行われますか?

22

doneはメソッドです 戦略の実装によって内部的に呼び出されます

次に、ご覧のとおり、success/error/failメソッドの1つにナビゲートします(これも実装によって異なります。 その他のオプションがあります )。これらの各オプションは、 callsnextを指定できます。スニペットコードでは次のとおりです。

function(req, res) {
  res.redirect('/');
});

successが呼び出されると、 ユーザーをリクエストにアタッチできます または必要に応じて他のことを行います(optionsを探してpassport.authenticate)。 nextがいつ呼び出されるかを決定する場合は、 custom callback を使用する必要があります。これにより、柔軟性が向上します。

ソースを読むことを強くお勧めします。

35
Roy Miloh