在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