护照中间件没有 运行
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()
.
的函数之前
我正在使用 passportJS 进行身份验证。我在 app.js
中调用了函数 setAuthenticatedUserapp.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()
.