护照中间件没有 运行

passport middleware does not run

我正在使用 passportJS 进行身份验证。我在 app.js

中调用了函数 setAuthenticatedUser
app.use(passport.initialize());
app.use(passport.session());
app.use('/', require('./routes'));
app.use(passport.setAuthenticatedUser);

这是我在文件 ./config/passport-local.js

中的中间件
passport.setAuthenticatedUser = async function (req, res, next) {
    if (await req.isAuthenticated()) {
        // req.user contains the current signed in user from the session cookie and we are just sending this to the locals for the views
        res.locals.user = req.user;
        // console.log('Locals\' user loaded');
    }
    next();
}

没有错误,但 setAuthenticatedUser 在 app.js 调用后没有 运行。相反,我必须从每个路由手动调用中间件

router.get('/', passport.setAuthenticatedUser, homeController.home);
router.get('/route1', passport.setAuthenticatedUser,homeController.route1);
router.get('/route2', passport.setAuthenticatedUser, homeController.route2);
router.get('/route3', passport.setAuthenticatedUser, homeController.route3);
router.get('/route4', passport.setAuthenticatedUser, homeController.route4);

我以后会添加更多的路线。我该怎么做才能不必为每个获取请求添加中间件?

如果您需要更多信息,请告诉我

尝试翻转对 app.use 的最后两次调用的顺序。 Express 将按照定义的顺序调用这些函数。

我假设您在 ./routes 中定义的路由不会调用 next(),因此下一组中间件(在本例中为 passport.setAuthenticatedUser)无法 运行。因此,请确保对 Passport 函数的调用发生在路由处理程序之前,或者更一般地说,发生在任何不会调用 next().

的函数之前