Angularjs $http ne semble pas comprendre “Set-Cookie” dans la réponse
J'ai un nodejs exprimer le REPOS de l'api du module du Passeport pour l'authentification.
Une méthode d'ouverture de session (GET) retourne un cookie dans l'en-tête. Quand je l'appelle à partir de Chrome cela fonctionne très bien, mon cookie est placé dans mon navigateur.
Mais si je l'appelle par $http à partir d'Angularjs, le cookie n'est pas configuré.
Set-Cookie:connect.sid=s%3Ad7cZf3DSnz-IbLA_eNjQr-YR.R%2FytSJyd9cEhX%2BTBkmAQ6WFcEHAuPJjdXk3oq3YyFfI; Path=/; HttpOnly
Comme vous pouvez le voir ci-dessus, la Set-Cookie est présent dans l'en-tête du service http de la réponse.
Peut-être HttpOnly peut-être la source de ce problème? Si oui, comment puis-je le changer? Voici mon express :
app.configure(function () {
app.use(allowCrossDomain);
app.use(express.bodyParser());
app.use(express.cookieParser())
app.use(express.session({ secret: 'this is a secret' }));
app.use(flash());
//passport init
app.use(passport.initialize());
app.use(passport.session());
app.set('port', process.env.PORT || 8080);
});
Merci pour votre aide
- pourriez-vous fournir à vos angulaire de la méthode d'appel de $http pour se connecter s'il vous plaît. ne peut pas dire quel est le problème pour l'instant
Vous devez vous connecter pour publier un commentaire.
Assurez-vous de configurer votre $requête http à utiliser des informations d'identification.
À partir de la XHR documentation:
https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS
Vous pouvez utiliser les options de l'objet pour définir l'utilisation des informations d'identification, voir
http://docs.angularjs.org/api/ng.$http
Exemple:
set-cookie
dans la réponse.Comment êtes-vous de vérifier l'existence du cookie?
$http
est juste un wrapper autour du navigateur XHR, tout comme jQuery$.ajax
et amis. Cela signifie que votre navigateur va gérer les cookies normalement.Ma conjecture est que le cookie est en cours de définition, mais vous êtes en train de le lire à travers
document.cookie
.HttpOnly
empêche script d'avoir accès à la cookie. C'est une bonne chose.HttpOnly
contribue à atténuer contre les attaques XSS. Elle rend impossible pour un script malveillant voler la session d'un utilisateur jeton (et donc leur login). N'éteignez pasHttpOnly
.Vous ne devez pas le cookie de toute façon. Depuis
$http
est juste un wrapper autour de la XHR, le navigateur va automatiquement envoyer le cookie, la prochaine fois que vous faites une demande. Vous pouvez le vérifier en regardant les demandes dans les Outils de développement du Réseau de bord.J'ai résolu le problème en mettant en
{withCredential : true}
dans l'angle$http
demande et en définissant :dans mon express configuration de serveur. En faisant cela, mon cookie apparaît bien dans mon navigateur liste des cookies.
Ci-dessous la solution a fonctionné pour moi
Dans Angulaire, j'ai utilisé l'extrait de code suivant à l'aide de
withCredentials: true
pour ma demande.Dans le Nœud, avant que je trouve la solution, je viens de l'initialisation de de la SCRO à l'aide de
Mais, maintenant, j'ai mis en œuvre l'extrait de code suivant
Espère que la solution ci-dessus va travailler pour votre problème.
Vous pouvez le modifier par la configuration de
express.session
:Mais je ne pense pas Angulaire se soucie trop des cookies, ceux-ci sont gérées par le navigateur (et je suis d'accord avec @josh3736 que vous devez garder
httpOnly
àtrue
).Il pourrait avoir quelque chose à faire avec vos cookies (navigateur)les cookies de session. Vous pouvez essayer et voir si cela fonctionne mieux définir explicitement un
maxAge
le cookie (en millisecondes).