我正在使用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
由于
答案 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