Что такое "сделанная" функция обратного вызова в стратегии паспорта. Настройте функцию "использование"

Я node.js и express.js noob. Этот вопрос может показаться глупым, но я действительно в замешательстве.

Я пытаюсь настроить аутентификацию Local Strategry с помощью passport. Как показано в официальной документации, мы можем определить эту локальную стратегию следующим кодом,

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 callback не будет равна null, если мы не предоставим параметр функции? Если нет, то какова функция done callback и какие процессы будут выполняться в этой функции обратного вызова done?

Ответ 1

done - метод вызванный внутренней реализацией стратегии.

Затем он перемещает вас, как вы можете видеть, к одному из методов success/error/fail (опять же, по реализации. есть больше вариантов). Каждый из этих параметров может звонить в next, где в вашем коде фрагмента указано следующее:

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

Когда вызывается success, он может присоединить пользователя к запросу или делать другие вещи, в зависимости от ваших потребностей (он ищет options вас перейдите к passport.authenticate). Если вы хотите определить, когда будет вызываться next, вы должны использовать custom callback, что дает вам большую гибкость.

Я настоятельно рекомендую вам прочитать источник.