Доступ к переменным сеанса в представлении 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