我无法弄清楚如何最好地将用户详细信息(电子邮件,姓名等)传递给“登录”视图(我正在使用jade)。
我正在使用护照,并且在我的视图中可以访问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。
答案 0 :(得分:2)
您可以将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('/');
}