帆会议写错误

时间:2014-08-20 10:15:34

标签: node.js sails.js

我正在使用风帆0.10.4并偶然发现一个非常讨厌的bug。当用户登录时,我将他的数据写入req.session.user,然后在政策中我可以检索他的数据,例如他的角色,密码等。但当我离开时,req.session.user变为undefined login行动。你有任何想法如何处理这个?这是代码:
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 /策略/ 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();
  }
}

1 个答案:

答案 0 :(得分:0)

在测试环境中,使用Supertest进行测试而不是定义代理

时可能会发生此问题
var agent = request.agent(app);
agent.post('/api/login',{email:'foo@bar.com',password:'foobar})
.end(function(err,res){...; done();});

这是使用会话的正确方法,简单地使用request.post将无法正常工作,因为它会在发送响应后立即重新启动会话变量,即使我们在同一测试中链接请求也是如此。 / p>

认真学习,所以我希望它可以帮助一些失去的开发者。