Ich habe eine App, die Knoten im Backend verwendet und am Frontend reagiert (mit einem Hash-Verlauf).Umleiten zu einem URL-Fragment setzt Sitzung auf Chrome (Node/React/React-Router) zurück
Das bedeutet, meine api Endpunkt-URLs wie folgt aussehen:
https://example.com/api/login
und meine reagieren Endpunkte alle Fragmente aus der Wurzel sind:
https://example.com/#/somePage
Nach dem Benutzer in (durch OAuth2) Anmeldung Ich möchte Leite den Benutzer zu einem bestimmten URL-Fragment innerhalb des React SPA um.
Mein erster Gedanke dafür war, den Server nur umleiten zu dem URL-Fragment.
Mein Weg Handler sieht ungefähr so aus:
app.get('/oauthCallback', (req, res) => {
req.session.token = 'some token'
redirect('/#/someLoggedInPage')
}
In Safari das funktioniert gut und jeder weitere API-Anfragen aus dem SPA gemacht haben die gleiche req.session teilen und damit das Token und kann authentifiziert Downstream-Anforderungen machen .
In Chrome verursacht die nächste API-Anforderung jedoch bei der Umleitung die Erstellung einer neuen Sitzung, wodurch das Token verloren geht und authentifizierte Anforderungen nicht erfolgreich ausgeführt werden können.
Alles funktioniert gut, wenn zu einem anderen API-Endpunkt umgeleitet wird (nicht im SPA).
Es funktioniert auch nicht, wenn ich an /
, die Wurzel des SPA umleiten.
Ich frage mich, ob es etwas gibt, weiß ich nicht, wie Chrome URL-Fragmente und Sitzungen behandelt.
Dies erklärt auch, warum es für API-Anfragen, aber nicht für Anfragen aus dem SPA funktionierte, da die SPA-Anfragen die einzigen waren, die 'fetch' verwenden und daher diese Option benötigen –