экспресс/нефрит получить текущего пользователя в поле зрения

У меня есть простое приложение nodejs/express от этот пример. В этом представлении проверяется переменная Everyauth.loggedIn, но в моем приложении я не использую модуль Everyauth, вместо этого использую следующий код:

req.session.auth = user;

Как я могу получить доступ к req.session.auth в представлении в этом случае?


person Erik    schedule 03.02.2012    source источник
comment
Если вы попали сюда и используете Express 3.0, вот ответ: stackoverflow.com/questions/11580796/   -  person plus-    schedule 17.01.2013


Ответы (2)


Вам нужно будет использовать dynamicHelper, чтобы открыть что-либо в объекте сеанса (или самом объекте сеанса). Вы можете сделать что-то подобное в своем app.js:

app.dynamicHelpers({
  auth: function(req, res){
    return req.session.auth;
  }
});

Затем в ваших представлениях у вас будет переменная auth, указывающая на объект сеанса. Например:

You are logged in as <%= auth.name %>
person Scott Anderson    schedule 03.02.2012
comment
Спасибо. Есть ли в этом подходе какие-либо проблемы с безопасностью? - person Erik; 03.02.2012
comment
Это просто вспомогательный метод, который доступен для ваших представлений, поэтому я не могу думать о каких-либо проблемах безопасности. Однако в целом я бы следовал правилу выставлять только то, что мне нужно. - person Scott Anderson; 04.02.2012

Просто чтобы добавить некоторую информацию, ответ Скотта — это способ сделать объект «auth» доступным во всех ваших представлениях (Express Dynamic Helpers), но если вы хотите использовать его только в одном конкретном представлении, вы можете передать его с помощью локальных переменных в методе рендеринга (документ Express' res.render):

res.render('yourView', { auth: req.session.auth });
person mna    schedule 03.02.2012