2017-05-09 1 views
0

eingestellt wurde, als in meiner Yii2 Anmeldung + AngularJS Seite, erstelle ich Cookie mit Benutzerdaten:Express js nicht Cookie sehen, dass vor dem Aufruf Route

$jwt = JWT::encode(array(1,2,3), 'myKey123') 
setcookie('myData', $jwt, time() + 3600); 

ich es in meinem NodeJS zugreifen möchten + express app - vor der Bearbeitung der Anfrage muss ich prüfen, ob der Benutzer den 'myData' Cookie nicht geändert hat. Dies ist, wie ich es jetzt tun:

app.use(cookieParser()); 

app.get('/*', function (req, res, next) { 
    if(req.cookies.myData) { 
     jwt.verify(req.cookies.myData, 'myKey123', function(err, decoded) { 
      if(err) 
       res.sendStatus(403); 
      else 
       return next(); 
     }); 
    } else { 
     res.sendStatus(403); 
    } 
}); 

Wenn, nachdem ich die Anmeldung I Express.js Route direkt in Browser aufrufen, App sieht Cookie.

Problem: Wenn Route aufgerufen wird, indem $ http.get() -Anfrage, Expressjs App sieht keine Cookies.

Yii2 und Expressjs läuft auf der gleichen IP, aber auf verschiedenen Ports, aber ich habe gelesen, dass verschiedene Ports nicht der Grund sein sollte, sollte es? Ich habe mit dem Setzen verschiedener Cookie-Parameter herumgespielt, aber nichts scheint zu helfen. Ich würde mich über jede Hilfe oder Hinweise freuen, die ich bekommen konnte, danke!

+0

Siehe [Sind HTTP-Cookies portspezifisch?] (Http://stackoverflow.com/questions/1612177/are-http-cookies-port-specific). – jfriend00

+0

Ja, ich habe das gelesen, bevor ich meine Frage erstellt habe. Dort habe ich gelernt, dass verschiedene Ports dieselben Cookies verwenden können. Also sollte mein Code theoretisch funktionieren, oder? Aber das tut es nicht. Muss ich vielleicht einige zusätzliche Parameter oder Einstellungen zu $ ​​http.get() hinzufügen, da ich keine Cookies erhalten kann, wenn ich Anfragen an die Express-App sende? – Lina

+0

Ich würde vorschlagen, dass Sie alle auf dem Client und dem Server vorhandenen Cookies protokollieren. Es gibt andere Gründe, warum Sie Cookies verlieren können (Domänenkonflikt, Pfadkonflikt, Ablauf, falsche Einstellung des Cookies usw.). Es scheint, dass ein anderer Port nicht verhindert, dass Cookies gesendet werden, es sei denn, der Cookie wurde speziell für nur einen Port gesetzt, aber es gibt viele andere Gründe, warum dies passieren könnte. Sie müssen etwas debuggen, um mehr zu erfahren. Aufgrund des begrenzten Codes, den wir sehen können, ist es für uns schwer zu erraten. – jfriend00

Antwort

0

Also ich weiß, was jetzt falsch ist - in meinen $ http.get() Anfragen habe ich einfach withCredentials: true nicht gesetzt. Wenn Anfrage "gemacht" direkt in Browser wurde, Cookies wurden standardmäßig übergeben, aber wenn es über $ http.get() zu tun hatte ich zusätzliches Argument zu setzen, zum Beispiel:

$http.get(myService('myRoute'), { 
    params: { 
     param1: 1, 
     param2: 2 
    }, 
    withCredentials: true 
}).then(function(response) { 
    $scope.returnedData = response.data; 
}); 

Quelle: AngularJs documentation for $http requests

withCredentials - {boolean} - Legt fest, ob das withCredentials-Flag für das XHR-Objekt gesetzt werden soll. Weitere Informationen finden Sie unter Anfragen mit Anmeldeinformationen.