【问题标题】:Accessing session variables in sailsjs view在sailsjs 视图中访问会话变量
【发布时间】:2023-03-09 06:34:01
【问题描述】:

我对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方法。

【问题讨论】:

  • 如果用户id已经分配给req.session.user,你可以在视图文件中引用一个名为user的变量,并在控制器动作中调用res.view({user: req.session.user})。
  • @bnuhero:感谢您的回复。正如我在帖子中所说,这是我不想做的。由于需要从 layout.ejs 文件中访问用户会话详细信息,因此我不想将每个控制器操作中的用户详细信息传递给视图。有什么方法可以全局访问会话详细信息,或者设置可以从任何视图中访问的值,而无需在每个控制器操作上显式设置?
  • 您可以定义一个自定义中间件来实现这一点。详情请访问link

标签: node.js sails.js ejs


【解决方案1】:

req 对象默认在您的视图中可用,除非您完全覆盖 res.locals。因此,您可以使用 <%=req.session.user%> 访问视图中的会话变量(如果您使用的是 EJS)。您不必将其显式复制到本地。

【讨论】:

  • 非常感谢!这对于显示退出按钮之类的东西非常有用
  • @Scott Gress:谢谢你的回复,今晚我会试试这个,如果它适合我​​就接受。
  • @Scott Gress:感谢您的回复。我赞成你的回答,因为它是有效的,但我最终选择了下面显示的选项。
  • 我们可以在 标记中包含 if else 语句吗?
  • @glasspill 不,但您可以将任何您想要的 Javascript 放入 <% %> 标记中(不带 =)。请参阅EJS reference 了解更多信息。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    我最终决定采用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
    

    【讨论】:

    • 你知道如果不清除sails.config.userdata会被所有请求共享吗?
    • 是的。 Sails 配置在所有请求中是全局的,而不是单个请求或会话。这不是一个好的解决方案,除非您一次只计划支持一个登录用户。
    • @sgress454 你有什么建议,而不是这样做,但不使用req.session?因为我使用的是 JWT 身份验证,所以我没有会话存储。在每个请求中,我都会收到令牌,并且在有效负载中它具有用户 ID,那么如何才能为每个请求全局访问该信息?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-18
    • 2018-04-05
    • 2012-08-22
    • 2015-07-21
    • 1970-01-01
    相关资源
    最近更新 更多