Node.js sails会话编写错误

Node.js sails会话编写错误,node.js,sails.js,Node.js,Sails.js,我使用的是sails 0.10.4,但遇到了一个非常恼人的bug。当用户登录时,我将其数据写入req.session.user,然后在策略中,我可以检索其数据,例如他的角色、密码等。但是,当我退出登录操作时,req.session.user变得未定义。你知道怎么处理吗?代码如下: api/controllers/User.js: module.exports = { login: function (req, res) { Users.findOneByEmail(req.param

我使用的是sails 0.10.4,但遇到了一个非常恼人的bug。当用户登录时,我将其数据写入req.session.user,然后在策略中,我可以检索其数据,例如他的角色、密码等。但是,当我退出登录操作时,req.session.user变得未定义。你知道怎么处理吗?代码如下: api/controllers/User.js:

module.exports = {
  login: function (req, res) {
    Users.findOneByEmail(req.param('email'))
      .exec(function (err, user) {
        if ((err) || (!user)) {
          res.send({
            error: 'User not found'
          });
          return;
        }
        if (!passwordHash.verify(req.param('password'), user.password)) {
          res.send({
            error: 'Incorrect passwpord'
          });
          return;
        }
        req.session.user = user;//I write user into the session
        res.send({
          user: user
        });
      });
  }
}
api/policies/isLoggedIn.js

module.exports = function (req, res, next) {
  if (req.headers.authentication) {
    var credentials = JSON.parse(req.headers.authentication);
    if(req.session.user.login === credentials.login)//User doesn't exist in session
      return next();
  }
}

在测试环境中,当使用Supertest进行测试而不定义代理时,可能会发生此问题

var agent = request.agent(app);
agent.post('/api/login',{email:'foo@bar.com',password:'foobar})
.end(function(err,res){...; done();});
这是处理会话的正确方法,简单地使用request.post是行不通的,因为它会在发送响应时重新输入会话变量,即使我们将请求链接到同一测试中


通过艰苦的学习,我希望它能帮助一些迷路的开发人员。

展示一些代码,例如您的登录控制器和策略,会很有帮助。我已经更新了它。在策略文件中,会话对象不包括user.console.logreq.session.user是否为isLoggedIn提供未定义的?是。它在0.10-rc7时运行良好。我想可能需要配置一些东西才能工作。升级后立即开始发生这种情况?没有其他变化吗?到目前为止,我们还没有看到任何其他关于会话被删除的报告。您是在使用内置内存会话,还是在Mongo或Redis上存储?