J'utilise le package request
pour créer mes requêtes côté serveur. J'ai écrit un middleware d'authentification qui vérifie un identifiant de cookie/session pour toutes les demandes. Par conséquent, existe-t-il un moyen d'inclure le cookie de l'utilisateur dans le cadre de la demande? Voici mon code actuel:
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');
});
Actuellement, cela renvoie "aucun cookie trouvé" dans la console. Cependant, si je désactive mon middleware d'authentification, le code ci-dessus fonctionne comme prévu.
Information additionnelle:
Le cookie que je veux est le cookie de l'utilisateur final situé sur le navigateur. Le cookie de l'utilisateur final est créé par l'application chaque fois que l'utilisateur se connecte.
Mise à jour - tentative de solution 1:
J'ai essayé cela à partir de la documentation:
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');
});
Cependant, la console renvoie toujours "aucun cookie trouvé"
Quelqu'un peut-il aider?
Merci d'avance!
Laissez-moi vous expliquer les cookies et cela vous montrera probablement pourquoi il est difficile d'obtenir le cookie que vous souhaitez.
http://localhost:3000
, ce serveur crée un cookie de connexion et le renvoie dans le cadre de la réponse de connexion.http://localhost:3000
domaine et port.http://localhost:3000
, le navigateur envoie tous les cookies qu'il a précédemment enregistrés pour ce domaine et ce port particuliers avec la demande au serveur.Maintenant, passons à votre code node.js. Vous montrez un bloc de code node.js qui essaie d'accéder au même http://localhost:3000
serveur. Mais, les cookies sont stockés dans le navigateur de l'utilisateur. Votre code node.js ne peut pas les obtenir du navigateur car le navigateur les protège et ne les révélera que lorsque le navigateur lui-même envoie une demande à http://localhost:3000
.
Si vous avez réellement le bon cookie dans votre code node.js, vous pouvez le définir sur votre demande comme ceci:
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');
});
La documentation pertinente pour les en-têtes personnalisés dans le module request
est ici .
Répondre:
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);