我想找到登录用户,并将其信息设置为app.locals
,以便我可以在任何视图中使用它。
我在我的server.js
文件中进行设置,如下所示:
app.use(ensureAuthenticated, function(req, res, next) {
User.findOne({ _id: req.session.passport.user }, (err, user) => {
console.log('user\n', user)
app.locals.logged_in_user = user;
next();
})
});
console.log('user\n', user)
确认已找到该用户。
然后,我应该可以在任何部分使用此用户的信息,例如在我的layout.hbs
文件中,如下所示:
Currently, {{logged_in_user}} is logged in.
但是,它不起作用。答案here建议使用res.locals
代替,但这不起作用。示例here使用静态数据,但我需要动态数据,因为user
将取决于谁登录。
现在,我必须在每条路线中定义user
变量。有没有办法全局定义可以在任何部分中使用的user
变量?
答案 0 :(得分:1)
您正在使用护照从代码判断。 documentation声明如下:
如果身份验证成功,将调用下一个处理程序,并将
req.user
属性设置为经过身份验证的用户。
因此,您可以执行以下操作(或者您想要执行此操作):
app.use((req, res, next) => {
res.locals.user = req.user
next()
}
这会将用户对象传递给所有请求和视图。