5

我正在使用 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  

谢谢

4

2 回答 2

8

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

注意:req.user 是由 passportJS 设置的,你可以从这里(底部)
看到他们的例子 注意#2:更多关于本地人的信息在这里

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 与 app.locals

于 2013-06-20T02:41:44.517 回答
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
于 2013-06-20T03:03:38.010 回答