在sailsjs视图中访问会话variables

我对sailsjs和nodejs很陌生。 我正在尝试创build一个authentication页面,其中一旦用户被authentication,我想设置

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

然后我需要在我的主layout.ejs文件中访问这些值。 我已经这样做了

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

但是,我注意到这个克隆方法必须在每个控制器的每个函数中调用,以便我能够从视图内访问用户。 是否有更好的方式来访问sailsjs globbaly中的会话variables,而不必克隆每个控制器中的req.session。 我在做的一个例子可以在这里find:

http://pastebin.com/HyE2H4Kq

正如你所看到的,我已经在控制器中的各种函数的开头调用了克隆方法。

除非您完全覆盖res.locals ,否则默认情况下req对象在您的视图中可用。 所以你可以在你的视图中使用<%=req.session.user%>来访问会话variables(如果你使用的是EJS)。 您不必将其明确复制到您的当地人。

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

我终于决定采用这里提供的解决scheme,因为我发现这是最好的解决scheme。

我创build了一个名为userdata.config的configuration文件,其中包含以下代码:

 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