Доступ к переменным сеанса в представлении sailsjs

Я совершенно новый для sailsjs и nodejs. Я пытаюсь создать страницу проверки подлинности, в которой после аутентификации пользователя я хочу установить

req.session.user = user.id
req.session.authenticated = true

Затем мне нужно получить доступ к этим значениям в моем основном файле layout.ejs. Я сделал это, используя

res.locals.user = _.clone( req.session.user )

Однако я заметил, что этот метод clone должен вызываться в каждой функции каждого контроллера, чтобы позволить мне иметь доступ к пользователю из представлений. Есть ли лучший способ доступа к переменным сеанса в sailsjs globbaly, без необходимости клонировать req.session в каждом контроллере. Пример того, что я делаю, можно найти здесь:

http://pastebin.com/HyE2H4Kq

Как вы можете видеть, я вызвал метод clone в начале различных функций внутри контроллера.

Ответ 1

Объект req доступен по умолчанию, если вы полностью не перезаписываете res.locals. Таким образом, вы можете получить доступ к переменной сеанса в своем представлении с помощью <%=req.session.user%> (если вы используете EJS). Вам не нужно явно копировать его на своих локальных жителей.

Ответ 2

для любого пользователя, использующего passport.js, сеанс пользователя сохраняется внутри req.session.passport.user, и вы также можете получить к нему доступ непосредственно из представления

Ответ 3

Наконец-то я решил пойти с предложенным решением здесь, так как я нашел это самым аккуратным решением.

Я создал файл конфигурации с именем userdata.config, в котором у меня есть следующий код:

module.exports.userdata = {
    guest: true,
    authenticated: false
};

Затем я получаю доступ к этому в контроллере следующим образом:

sails.config.userdata.authenticated = true;
sails.config.userdata.guest = false;
sails.config.userdata.user = sessionUser;

Затем в представлении поступают следующие данные:

sails.config.userdata.user.firstName