2016-11-03 6 views
1

Ich habe 2 separate Apps, nennen wir sie Login & Dashboard. Beide Apps haben eine Benutzeroberfläche in Reaktion und einen Express-Server geschrieben.Express js Redirect Cookies nicht gesendet

Wenn ich in meiner Login-App einen POST von meiner Login-Benutzeroberfläche aus anmelde, trifft er den Login Express-Server zur Authentifizierung. Nach der Authentifizierung, habe ich ein Cookie und Umleitungs-URL zu meinem Dashboard:

res.cookie(cookie.key, cookie.access_token, { 
     path: '/', 
     domain: cookie.domain, 
     httpOnly: true, 
     maxAge: cookie.rememberExpiry 
    }) 

res.redirect(dashboard_url) 

Allerdings, wenn ich req.cookies in meinem Dashboard-App verwenden, ich sehe keine Cookies.

Wenn ich die POST aus meiner Anmeldung UI machen sehe ich in der Tat ein Netzwerk Anruf unter Angabe Response-Header:

Set-Cookie: mycookie=cookievalue; Max-Age=28800; Domain=.local.myurl.com; Path=/; Expires=Thu, 03 Nov 2016 19:20:39 GMT; HttpOnly

Beachten Sie, dass dieser Moment als von der Zeit November 3 2016, 11.28 Uhr GMT Es ist also kein Ablaufproblem.

Zum Testen habe ich meine Hosts-Datei so bearbeitet, dass login.local.myurl.com & dashboard.local.myurl.com auf localhost zeigt.

Gibt es einen Grund, warum die req.cookies in der Dashboard Express App nicht verfügbar ist ??

+0

Können Sie sehen, dass die Cookies mit der Anfrage gesendet werden? Ist die Anfrage, für die keine Cookies gesetzt sind, eine "normale" Anfrage oder eine XHR-Anfrage? – robertklep

+0

Was meinen Sie mit "kann ich die Cookies sehen, die mit der Anfrage gesendet werden?"? Ich sehe nichts, wenn ich "req.cookies" in meinem Dashboard-Express-Server logge. In meiner Login-Benutzeroberfläche, wenn ich an den Login Express-Server anmelde, sehe ich in meiner Chrome-Netzwerk-Registerkarte: POST 302 gefunden mit Antwort-Header gesetzt –

+0

Auf der Registerkarte Netzwerk sehen Sie sich die Anfrage aus dem Dashboard und prüfen, ob diese Anfrage enthält 'Cookie'-Header (um auszuschließen, dass die 'cookie-parser'-Middleware nicht ordnungsgemäß verwendet wird). – robertklep

Antwort

1

Mein Problem war 2-fach.

Zuerst musste ich credentials: 'same-origin' auf fetch setzen, was bedeutet, dass ich Cookies auf der Anforderungsbibliothek bestehen bleiben musste, die ich verwendete.

Zweitens, weil mein Server und mein Client im Wesentlichen getrennt sind, hatte eine Umleitung auf dem Server nicht die beabsichtigte Wirkung auf dem Client. Daher konnte ich nicht nur res.redirect von der Server-Antwort. Stattdessen ersetzte ich die res.redirect Linie mit res.status(200).send() und in meinem Client-Code habe ich einfach window.location.replace('http://dashboardurl.com').

Hoffnung, die jedem hilft, der dieses Problem in der Zukunft hat.