Node.js 如何将用户数据传递到所有视图中?
我无法确定如何最好地将用户详细信息(电子邮件、姓名等)传递给“登录”视图(我使用的是jade) 我正在使用passport,在我的视图中可以访问Node.js 如何将用户数据传递到所有视图中?,node.js,express,pug,passport.js,Node.js,Express,Pug,Passport.js,我无法确定如何最好地将用户详细信息(电子邮件、姓名等)传递给“登录”视图(我使用的是jade) 我正在使用passport,在我的视图中可以访问session.passport.user,但只有用户的id保存在这里,而且我被告知在会话cookie中本地保留它是不好的安全做法 我不想在需要用户的每个控制器上都将用户对象传递到res.render 这就是我在本地设置会话的方式 app.use(function (req, res, next) { res.locals.session = req
session.passport.user
,但只有用户的id保存在这里,而且我被告知在会话cookie中本地保留它是不好的安全做法
我不想在需要用户的每个控制器上都将用户对象传递到res.render
这就是我在本地设置会话的方式
app.use(function (req, res, next) {
res.locals.session = req.session;
next(null, req, res);
});
这是我用来检查用户是否登录的中间件
function isLoggedIn(req, res, next) {
// if user is authenticated in the session, carry on
if (req.isAuthenticated()) {
return next();
}
// if they aren't redirect them to the home page
res.redirect('/');
}
我已经看过动态助手,但我使用的是express v3.0.0rc4。为此,您可以使用
res.locals
。您在该对象中放置的任何内容都将在视图上下文中可用(当然,除非它被稍后的上下文覆盖)。因此,例如,您可以修改isLoggedIn
中间件,从而:
function isLoggedIn(req, res, next) {
// if user is authenticated in the session, carry on
if (req.isAuthenticated()) {
// obviouisly, don't use static strings...
// get these values from your authentication
// mmechanism
res.locals.user = 'username';
res.locals.userEmail = 'user@domain.com';
return next();
}
// if they aren't redirect them to the home page
res.redirect('/');
}
由于您使用的是
passport
,因此req应具有.user
。