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を作成し、ログインレスポンスの一部としてそれを返します。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 です。
回答:
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);