我正在从头开发一个nodejs应用程序。我刚刚开始玩节点。我正在构建一个登录系统,但我发现了一个问题:
当我使用正确的名称和密码登录时,cookie设置为“remember_token”值。它应该存储用户会话。这是我的谷歌浏览器浏览器中的cookie
cookie设置正确,但是当浏览器发出新请求时,服务器中未设置cookie值:
当我提出trhoug curl请求时,服务器会收到cookie:
curl -i 'http://localhost' -b "remember_token=ZnVuY3Rpb24gbm93KCkgeyBbbmF0aXZlIGNvZGVdIH0wLjA1NTg2MzU1MTU2MjY1MTk5"
有条件的信息
在调用任何中间件之前,我将此行添加到app.js:
app.use(function(req, res, next){
console.log('\nrequest: ' + JSON.stringify(req.headers));
next();
});
这是我从浏览器发出请求时的输出:
request: {"host":"node","connection":"close","cache-control":"max-age=0","accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8","user-agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36","referer":"http://localhost/","accept-encoding":"gzip,deflate,sdch","accept-language":"es-419,es;q=0.8,en;q=0.6,en-AU;q=0.4,en-CA;q=0.2,en-US;q=0.2,en-NZ;q=0.2,en-GB;q=0.2,en-ZA;q=0.2","cookie":"connect.sid=s%3AB8g0VGivuIuOt4A9DKl3WMFu.625Hfc6W4TiMUJyK4X9clfeNa0Fi8Pd%2Fdmg0sSPAW5E","if-none-match":"\"-651269513\""}
不记得标题上的令牌cookie。测试:谷歌铬,铬和Mozilla Firefox。这是为什么?
更新
这就是我创建cookie的方式:
exports.identificar = function (req, res, success, fail) {
var remember_token = null;
var u;
usuarios.findByEmail(req.body.sesion.email,function(usuario){
if (usuario) {
crypt.comparePassword(req.body.sesion.password, usuario.password_digest, function(err, resp) {
if (err) {
fail('Hubo un error de encripción');
} else if (resp) {
remember_token = usuario.remember_token;
u = usuario.toJSON();
delete u['password_digest'];
delete u['remember_token'];
delete u['fecha_token'];
delete u['token'];
if (typeof req.body.sesion.recordar !== "undefined"){
res.cookie('remember_token', remember_token, {expires: new Date(Date.now() + 900000), secure: true});
} else {
res.cookie('remember_token', remember_token, {secure: true});
}
req.session.usuario = u;
success(u);
} else {
fail('Contraseña incorrecta');
}
});
} else {
fail('Usuario no encontrado');
}
});
};
解决
当我设置cookie时,我终于通过删除服务器中的“secure:true”选项来解决它,但是。为什么会这样?
答案 0 :(得分:1)
安全选项用于安全连接,我在设置cookie时必须删除服务器上的“secure:true”标志。