3

我正在尝试为我的 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);
4

1 回答 1

2

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

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

于 2015-04-27T07:22:57.110 回答