如何将用户数据传递到所有视图?

时间:2014-02-07 16:50:30

标签: node.js express pug passport.js

我无法弄清楚如何最好地将用户详细信息(电子邮件,姓名等)传递给“登录”视图(我正在使用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。

1 个答案:

答案 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('/');
}