我对sailsjs和nodejs很新。我正在尝试创建一个身份验证页面,其中一旦用户通过身份验证,我想设置
req.session.user = user.id
req.session.authenticated = true
然后我需要在我的主layout.ejs文件中访问这些值。我是通过使用
完成的res.locals.user = _.clone( req.session.user )
但是,我注意到必须在每个控制器的每个函数中调用此克隆方法,以便允许我从视图中访问用户。是否有更好的方法在sailsjs globbaly中访问会话变量,而无需在每个控制器中克隆req.session。我可以在这里找到我正在做的一个例子:
如您所见,我在控制器内的各种函数的开头调用了clone方法。
答案 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