在sailsjs视图中访问会话变量

时间:2014-02-23 03:30:04

标签: node.js sails.js ejs

我对sailsjs和nodejs很新。我正在尝试创建一个身份验证页面,其中一旦用户通过身份验证,我想设置

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

然后我需要在我的主layout.ejs文件中访问这些值。我是通过使用

完成的
res.locals.user = _.clone( req.session.user )

但是,我注意到必须在每个控制器的每个函数中调用此克隆方法,以便允许我从视图中访问用户。是否有更好的方法在sailsjs globbaly中访问会话变量,而无需在每个控制器中克隆req.session。我可以在这里找到我正在做的一个例子:

http://pastebin.com/HyE2H4Kq

如您所见,我在控制器内的各种函数的开头调用了clone方法。

3 个答案:

答案 0 :(得分:23)

默认情况下,req对象在您的视图中可用,除非您完全覆盖res.locals。因此,您可以使用<%=req.session.user%>访问视图中的会话变量(如果您使用的是EJS)。您无需将其明确复制到当地人。

答案 1 :(得分:0)

对于使用passport.js的任何人,用户的会话都会保存在req.session.passport.user中,您也可以直接从视图中访问

答案 2 :(得分:-2)

我最终决定采用here提供的解决方案,因为我发现这是最好的解决方案。

我创建了一个名为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