在Jade View中检查会话变量

时间:2013-06-20 01:14:11

标签: node.js express pug passport.js

我正在使用NodeJS,ExpressJS,PassportJS和Jade。

我有一个标题菜单,可以显示登录或注销。如果用户尚未登录则显示登录,如果用户已登录则显示登录。

菜单位于单独的玉文件中:menu.jade并包含在其余的玉文件中。

include menu

在menu.jade中,如何检查用户是否已登录?我可以在玉器中检查会话变量吗? menu.jade下面的内容如下所示?

if ( req.session.name != null)
    a(href='/logout') Logout
else
    a(href='/login') Login  

由于

2 个答案:

答案 0 :(得分:8)

您需要向模板公开会话。我这样做的方法是将用户变量放入本地:

注意:req.user由passportJS设置,您可以在here (in the bottom)上看到他们的示例。 注意#2:有关本地人的更多信息here

app.get('*', function(req, res, next) {
  // put user into res.locals for easy access from templates
  res.locals.user = req.user || null;

  next();
});

然后在模板中你可以这样做:

- if(_user) {
    div.menuForLoggedInUser
- } else {
    div.menuForLoggedOutUser
- }

如果你不想将整个用户对象暴露给模板,可以随意将“loggedIn”放到本地人身上并检查......那样的话就是这样:

app.get('*', function(req, res, next) {
  // just use boolean for loggedIn
  res.locals.loggedIn = (req.user) ? true : false;

  next();
});

编辑:感谢robertklep指出res.locals vs app.locals

答案 1 :(得分:1)

我将带来检查结果的变量登录。

// routes/some.js
exports.index = function (req, res) {
    res.render('somepage', {
        isAlreadyLoggedin: checkSessionSomeway()
    })
}

// menu.jade
if ( isAlreadyLoggedin != null)
    a(href='/logout') Logout
else
    a(href='/login') Login