Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 作为node.js请求的一部分传递cookie_Javascript_Node.js_Cookies_Request - Fatal编程技术网

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

Javascript 作为node.js请求的一部分传递cookie,javascript,node.js,cookies,request,Javascript,Node.js,Cookies,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

我正在使用
请求
包创建服务器端请求。我编写了验证中间件,用于检查所有请求的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”。但是,如果关闭身份验证中间件,上述代码将按预期工作

其他信息:

我想要的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”

有人能帮忙吗


提前谢谢

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

  • 当用户的浏览器登录到
    http://localhost:3000
    ,该服务器创建登录cookie并将其作为登录响应的一部分返回
  • 当浏览器收到该cookie时,它会将该cookie持久保存在浏览器中,并将该cookie与
    http://localhost:3000
    域和端口
  • 当用户再次请求
    http://localhost:3000
    ,浏览器将以前为该特定域和端口保存的所有cookie连同请求一起发送到服务器
  • 当服务器收到请求时,它可以检查随请求发送的任何cookie
  • 当浏览器随后向不同的服务器或甚至同一服务器发出请求,但位于不同的端口时,浏览器不会随该请求一起发送以前保存的cookie,因为这些cookie属于不同的服务器和端口。浏览器在安全性方面做了大量工作,只向cookie所属的服务器发送cookie。由于Cookie通常提供登录访问,您可以清楚地看到为什么登录凭据Cookie之类的东西不发送到不应该发送到的服务器是很重要的
  • 现在,转到node.js代码。您将显示一个node.js代码块,该代码块正试图访问相同的
    http://localhost:3000
    服务器。但是,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');
    });
    
    请求
    模块中自定义标题的相关文档为。

    答案:

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

    您将让top详细解释您要发送的cookie?最终用户的cookie存储在他们的浏览器中,并与特定浏览器和特定域唯一关联,并随浏览器对该域的任何请求一起发送到该域。请描述一下你在问什么饼干。如果cookie所属的域与您的服务器所在的域不同,则您的服务器将无法访问该cookie。@jfriend00-我更新了我的问题。谢谢cookie是在哪个域和端口上创建的?您的服务器位于哪个域和端口?@jfriend00域和端口分别是localhost:3000。我用我尝试过的解决方案更新了我的问题..运行问题中代码的服务器是哪个域和端口。这一点非常重要,因为浏览器将cookie与特定服务器关联,并以这种方式保护cookie。我试图找出cookie属于哪台服务器,以及您试图在哪台服务器上获取cookie以便发送它?是的,但我的第一行代码包含cookie。因此,从技术上讲,我已经有了cookie,我正试图将其作为我的
    请求
    函数的一部分传递。@user1547174-如果您确实有正确的cookie,那么您可以将其作为标题添加到您发送的请求中,正如我现在在回答的末尾所显示的那样。我很快发现了这一点。谢谢!!这行吗?也许可以添加一些文本来解释为什么它不同于OPM,例如,什么是parseCookie?它可以是“cookie parser”NPM模块。例如:
    路由器。使用(require(“cookie解析器”)()
    。然后在express.js处理程序中获得该属性
    req.cookies