【问题标题】:Can't store variables in express session无法在快速会话中存储变量
【发布时间】:2015-07-05 12:09:56
【问题描述】:

我正在尝试为我的 Web 应用程序构建基于会话的身份验证。我有以下身份验证功能:

function authenticate(req, res) {
  var body = req.body;

  getAuthUser(body.username, function (err, result) {

      if (hash(body.password) != result.password) {
          // invalid pass
          return;
      }

      req.session['user'] = result;
      res.redirect('/logged/panel');

      console.log(req.session); // 'user' session is displayed here
  });
}

我还有一个中间件,可确保用户在访问安全内容时通过身份验证:

function validateRequest(req, res, next) {
  console.log(req.session); // 'user' session is not displayed here
  (req.session.user) ? next() : res.redirect('/login');
}

问题是我的中间件没有看到authenticate 函数存储的变量。提前谢谢你。

编辑:

这就是我使用中间件的方式:

router.use(validateRequest);

【问题讨论】:

  • 这个答案可能对你有帮助stackoverflow.com/questions/23260676/…
  • @VladMatvei 您在哪里以及如何将validateRequest 注册为中间件?
  • 添加了我将中间件链接到我的路由的代码行

标签: javascript node.js express express-session


【解决方案1】:

您在另一个函数中没有req,因为它不在scope 中。您可以将 req 放在全局范围内,然后您可以在任何其他函数 global.req=req 中访问它,然后在另一个函数中使用 global.req 引用它,因为该函数将在范围内传递 req 而不是来自顶部框架

我现在发现路由器在 req.session.user 设置为 result 之前正在运行

【讨论】:

  • window?在nodeJS?
  • 我的函数中有一个请求。我可以读取其他 req 属性,但不能从身份验证函数中读取创建的会话。我添加了将中间件链接到路由的代码行。
  • 尝试只记录req.session
  • with req.session 我确实看到了一个会话,但缺少 user 属性
  • 用户属性尚未创建,因为您的路由器在路由信息时看到 var(html)
猜你喜欢
  • 2022-01-26
  • 2016-07-06
  • 2016-10-21
  • 2017-11-26
  • 2020-10-20
  • 2016-04-12
  • 2021-06-01
  • 2017-07-15
  • 2020-08-11
相关资源
最近更新 更多