2

Ich versuche authentifizierte Endpunkte in meinem Backend einzurichten (Express/Node/Mongo mit Express-Session) und kann ein Cookie an den Client senden (Chrome Version 53.0.2785.143) im Response Header, aber wenn ich in der Dev Console unter Application-> Storage-> Cookies->http://localhost:8100 nach dem Cookie suche, ist es nicht da und es wird nichts in nachfolgenden Request Headers zurück an den Server gesendet. Wenn ich jedoch den Code wie geschrieben mit Postman teste, scheint es, dass alles funktioniert, was bedeutet, dass der Server bei der Anmeldung einen Cookie sendet und der Cookie zurückgegeben wird, wenn ich authentifizierte Endpunkte abrufe.Google Chrome setzt kein Cookie vom NodeJS/Express Server

Response Headers 
HTTP/1.1 200 OK 
X-Powered-By: Express 
Vary: X-HTTP-Method-Override 
Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: DELETE, PUT, GET 
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept 
Content-Type: application/json; charset=utf-8 
Content-Length: 1258 
ETag: W/"4ea-X9Q0hp8ptccLVapzMZamYA" 
set-cookie: connect.sid=s%3AyEaCZPUtH-rA0yQ3Osk-FNBHxQNYbFqp.gvwe%2FO0GSSfaX6i8Y29XD9vEo6ht2M%2FqL00wiFpntnU; Path=/ 
Date: Tue, 25 Oct 2016 01:28:59 GMT 
Connection: keep-alive 

Request Headers 
POST /login HTTP/1.1 
Host: localhost:8000 
Connection: keep-alive 
Content-Length: 51 
Pragma: no-cache 
Cache-Control: no-cache 
Origin: http://localhost:8100 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 
Content-Type: application/json 
Accept: */* 
Referer: http://localhost:8100/ 
Accept-Encoding: gzip, deflate 
Accept-Language: en-US,en;q=0.8 

Request Payload 
{"email":"[email protected]","password":"test123"} 

Settings object for the session ID cookie: 
{ path: '/', _expires: null, originalMaxAge: null, httpOnly: false } 

session ID cookie name = 'connect.sid'. 

Ionic2 service to login user. 
public loginUser(user:Object):Observable<any>{ 
    let headers = new Headers(); 
    headers.append('Content-Type', 'application/json'); 
    return this.http.post('http://localhost:8000/login', JSON.stringify(user), {headers: headers}) 
      .map(this.extractData) 
      .catch(this.handleError) 
} 

public extractData(res: Response) { 
    console.log(res.headers); //cookie does not log here in response 
    let body = res.json(); 
    return body || { }; 
} 

Antwort

3

Normalerweise speichert Chrome keine Cookies für localhost. Bitte deaktivieren Sie Ihre Internetsicherheit in Chrome.

How to disable chrome web security ?

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --user-data-dir="C:/Chrome dev session" --args --disable-web-security 
+0

Ich laufe osX so lief ich dies im Terminal aber Cookie ist noch nicht gespeichert: $ offen -a Google \ Chrome --args --disable-Web-Sicherheit --user- data-dir -enable-file-cookies – user2232681

+0

Ok, also setze ich die Session-Optionen wie folgt und jetzt setzt Chrome den Cookie: app.use (session ({ secret: 'dein Geheimnis, Speicher: neuer MongoStore ({mongooseConnection : mongoose.connection}), cookie: { httpOnly: false, sicher: false }, re save: false, saveUninitialized: false })); Ich hatte einen Wert für den Domain-Parameter eingefügt, aber als Teil meiner Lösung habe ich ihn entfernt. – user2232681