0

我正在使用护照登录我的用户。当用户登录我的应用程序时,用户名将显示在标题中。

这是我的header.jade

div#header_content
input(type='text',name='search',id='globle_search')
span#user_status
    if(req.isAuthenticated())
        a(class='user_menu_btn',href='home', target='_blank' )  req.user.username
        a(class='user_menu_btn',href='logout') Logout
    else
        a(id='login_btn',href='login',class='user_status_btn') login

如果我运行该应用程序,我会收到一条错误消息:

 ReferenceError: F:\shopping\views\includes\header.jade:4
 req is not defined

这是我的索引路线:

app.get('/',index.index);

exports.index = function(req, res){
  res.render('index', { title: 'Express' });
};

如何维护标题中的登录状态?

4

2 回答 2

4

req在视图中访问,它必须是locals传递给视图引擎的对象的成员——默认情况下它不是。

// before: app.use(app.router);
app.use(function (req, res, next) {
    res.locals.req = req;
    next();
});

不过,既然userisAuthenticated是您需要的req,您可以直接附加它们:

// before: app.use(app.router);
app.use(function (req, res, next) {
    res.locals({
        get user() { // as a getter to delay retrieval until `res.render()`
            return req.user;
        },

        isAuthenticated: function () {
            return req.user != null;
        }
    })

    next();
});
if isAuthenticated()
    // ...
    a(...) #{user.username}
else
    // ...

请参阅res.localsapp.locals了解更多信息。

于 2012-10-12T03:12:06.680 回答
1

中间件:

app.use(function (req, res, next) {
    if ( req.session.user ) {
      req.session.logged_in = true;
    }
    res.locals.sess = req.session;
    next();
});

路线:

exports.index = function(req, res){
  res.render('index', { title: 'Express' });
};

看法:

if(sess.logged_in)
    a(class='user_menu_btn',href='home', target='_blank' )  sess.user.username
    a(class='user_menu_btn',href='logout') Logout
else
于 2012-10-12T04:54:15.237 回答