如何在使用 passport.authenticate 重定向之前执行功能

How to perform a function before a redirect with passport.authenticate

我正在使用登录脚本的 WebDevSimplifieds 版本。到目前为止它的工作,但我现在被困在一个我想在登录后重定向之前 运行 的功能。

用户在登录页面上输入所有凭据,如果一切正确,用户将被重定向到 index.ejs(html)。在重定向之前,我想运行一个函数,它根据用户在特定字段中输入的内容来改变服务器变量。

这是可行的,当然没有附加功能。

app.post(
  '/login', 
  checkNotAuthenticated, 
    passport.authenticate('local', 
      {
        successRedirect: '/',
        failureRedirect: '/login',
        failureFlash: true,
      }
    )
)

我想要那样的东西。 console.log 命令有效,但 passport.authenticate 无效。

app.post(
  '/login', 
  checkNotAuthenticated, (req, res) => {
    console.log("that works");
    passport.authenticate('local', 
      {
        successRedirect: '/',
        failureRedirect: '/login',
        failureFlash: true,
      }
    )}
)

passport.authenticate returns 具有签名 (req, res, next) 的函数,即中间件。

比较the source code:

module.exports = function authenticate(passport, name, options, callback) {
  // ...

  return function authenticate(req, res, next) {
    // ...
  };

  // ...
};

您需要调用该函数。

app.post(
  '/login', 
  checkNotAuthenticated,
  (req, res, next) => {
    console.log("that works");

    const authFunc = passport.authenticate('local', {
      successRedirect: '/',
      failureRedirect: '/login',
      failureFlash: true,
    });

    authFunc(req, res, next);
  )}
)