传递cookie作为node.js请求的一部分

我正在使用request包创build我的服务器端请求。 我写了authentication中间件,检查所有请求的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'); }); 

目前,这在控制台中返回“没有findcookie”。 但是,如果我closures身份validation中间件,上面的代码按预期工作。

附加信息:

我想要的cookie是位于浏览器上的最终用户的cookie。 最终用户的cookie是应用程序在用户login时创build的。

更新 – 解决scheme尝试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”

有人可以帮忙吗?

提前致谢!

让我来解释一下cookies,这可能会告诉你为什么很难得到你想要的cookie。

  1. 当用户的浏览器login到http://localhost:3000 ,该服务器将创build一个logincookie,并将其作为login响应的一部分返回。
  2. 当浏览器接收到该cookie时,它会将cookie保存在浏览器中,并将该cookie与http://localhost:3000域和端口相关联。
  3. 当用户再次向http://localhost:3000发出请求时,浏览器会将之前为该特定域和端口保存的所有Cookie发送到服务器。
  4. 当服务器收到请求时,它可以检查与请求一起发送的任何cookie。
  5. 当浏览器向不同的服务器或甚至同一服务器发出请求时,浏览器不会发送之前保存的cookie,因为这些cookie属于不同的服务器和端口。 浏览器的安全性非常高,只能将Cookie发送到Cookie所属的服务器。 由于Cookie通常提供login访问权限,因此您可以清楚地了解为什么login凭证Cookie等内容不会发送到不应发送到的服务器。

现在,到你的node.js代码。 您将显示一段正在尝试访问相同http://localhost:3000服务器的nod​​e.js代码。 但是,cookies存储在用户的浏览器中。 您的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模块中自定义标题的相关文档就在这里 。

回答:

 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);