我正在使用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”。但是,如果我关闭身份验证中间件,上面的代码将按预期工作。
附加信息:
我想要的 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”
有人可以帮忙吗?
提前致谢!
让我解释一下 cookie,这可能会告诉您为什么很难获得您想要的 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');
});
自定义标头的相关文档位于request
模块是here https://www.npmjs.com/package/request#custom-http-headers.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)