我正在使用request
包来创建我的服务器端请求。我编写了身份验证中间件,用于检查所有请求的cookie /会话ID。因此,有没有办法将用户的cookie包含在请求中?这是我目前的代码:
var cookie = parseCookie.parseCookie(req.headers.cookie);
request('http://localhost:3000/users/api', function(error, response, body) {
console.log(body); //this console.logs my login page since requests w/o valid cookies get redirected to login
res.render('../views/admin');
});
目前,这会返回“找不到Cookie”#39;在控制台中。但是,如果我关闭我的身份验证中间件,上面的代码将按预期工作。
其他信息:
我想要的cookie是位于浏览器上的最终用户的cookie。每当用户登录时,最终用户的cookie都会由应用创建。
更新 - 解决方案尝试1:
我在文档中尝试了这个:
var cookie = parseCookie.parseCookie(req.headers.cookie);
var cookieText = 'sid='+cookie;
var j = request.jar();
var cookie = request.cookie(cookieText);
var url = 'http://localhost:3000/users/api';
j.setCookie(cookie, url);
request({url: url, jar: j}, function(error, response, body) {
request('http://localhost:3000/users/api');
});
但是,控制台仍在返回“找不到Cookie'
”有人可以帮忙吗?
提前致谢!
答案 0 :(得分:20)
让我解释一下cookies,这可能会告诉你为什么很难获得你想要的cookie。
http://localhost:3000
时,该服务器会创建一个登录cookie并将其作为登录响应的一部分返回。http://localhost:3000
域和端口相关联。http://localhost:3000
发出请求时,浏览器会将之前为该特定域和端口保存的所有Cookie发送给服务器。现在,转到你的node.js代码。您将显示尝试访问同一http://localhost:3000
服务器的node.js代码块。但是,cookie存储在用户的浏览器中。您的node.js代码无法从浏览器获取它们,因为浏览器会保护它们,并且只有在浏览器自己向http://localhost:3000
发送请求时才会显示它们。
如果你在node.js代码中确实有正确的cookie,那么你可以在你的请求中设置它,如下所示:
request({url: 'http://localhost:3000/users/api', headers: {Cookie: somedataHere}}, function(error, response, body) {
console.log(body); //this console.logs my login page since requests w/o valid cookies get redirected to login
res.render('../views/admin');
});
request
模块中自定义标头的相关文档为here。
答案 1 :(得分:6)
答案:
var cookie = parseCookie.parseCookie(req.headers.cookie);
var cookieText = 'sid='+cookie;
var options = {
url: 'https://api.github.com/repos/request/request',
headers: {
'User-Agent': 'request'.
'host': 'localhost:3000',
'cookie': cookieText //this is where you set custom cookies
}
};
function callback(error, response, body) {
if (!error && response.statusCode == 200) {
var info = JSON.parse(body);
console.log(info.stargazers_count + " Stars");
console.log(info.forks_count + " Forks");
}
}
request(options, callback);