护照中间件不运行
Posted
技术标签:
【中文标题】护照中间件不运行【英文标题】:passport middleware does not run 【发布时间】:2021-06-03 20:01:40 【问题描述】:我正在使用 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();
在app.js中调用后没有错误但setAuthenticatedUser没有运行。相反,我必须从每个路由手动调用中间件
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);
我以后会添加更多的路线。我该怎么做才能不必为每个 get req 添加中间件?
如果您需要更多信息,请告诉我
【问题讨论】:
【参考方案1】:尝试将最后两次调用的顺序颠倒到app.use
。 Express 将按照定义的顺序调用这些函数。
我假设您在./routes
中定义的路由不调用next()
,因此下一组中间件(在本例中为passport.setAuthenticatedUser
)无法运行。因此,请确保对 Passport 函数的调用发生在您的路由处理程序之前,或者更一般地说,在任何不会调用 next()
的函数之前。
【讨论】:
以上是关于护照中间件不运行的主要内容,如果未能解决你的问题,请参考以下文章
护照身份验证不起作用。从未调用过的 Passport.serializeUser 和 passport.deserializeUser 会被调用