我正在使用风帆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();
}
}
答案 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>
认真学习,所以我希望它可以帮助一些失去的开发者。