Auf req.session-Variablen in Express / NodeJS kann nicht zugegriffen werden

8

Ich habe viele Variationen dieser Frage gesehen, aber keine schien mein Problem zu lösen. Ich versuche, einen Node.js Server mit Express einzurichten. Hier ist meine Serverkonfiguration:

%Vor%

Und hier sind ein paar einfache Routen:

%Vor%

Also kann ich in meiner login route die Sitzungsvariable wie erwartet ausgeben. Wenn ich jedoch die Route auth nach dem Besuch der Route login besuche, ist die Sitzungsvariable nicht definiert. Wie kann ich mit Express-Sitzungen arbeiten?

    
Andrew De Forest 19.01.2014, 03:25
quelle

3 Antworten

4

In einer typischen Webanwendung werden die Anmeldeinformationen, die zur Authentifizierung eines Benutzers verwendet werden, nur während der Anmeldeanforderung übertragen. Wenn die Authentifizierung erfolgreich ist, wird eine Sitzung über ein Cookie im Browser des Benutzers eingerichtet und verwaltet.

Jede nachfolgende Anforderung enthält keine Anmeldeinformationen oder alle Benutzerdaten, sondern das eindeutige Cookie, das die Sitzung identifiziert. Um Anmeldesitzungen zu unterstützen, müssen Sie Benutzerinstanzen bei jeder Anforderung in und aus der Sitzung serialisieren und deserialisieren.

In Ihrem Fall haben Sie req.session.user = user; nur in /login request zugewiesen. Es wird nicht für weitere Anfragen verfügbar sein ( /auth ).

Sie müssen Benutzerinformationen in der /auth Anfrage auch durch die Sitzungs-ID erhalten. (Oder) Sie können den Reisepass zur Authentifizierung verwenden.

    
Fizer Khan 19.01.2014, 05:23
quelle
1

Ich denke, dass Ihr Redis-Client nicht gut verbunden ist, versuchen Sie es so und starten Sie den Redis-Service

%Vor%

oder die Art, wie Sie die RedisStore-Variable aufrufen, sehen Sie sich das Beispiel an

Beispiel:

%Vor%     
Garibaldy Cramer 08.09.2015 02:34
quelle
1

Die aktuell akzeptierte Antwort erkannte nicht, dass express.session bereits Cookie-basierte Sitzungen mit dem Objekt req.session behandelt. Ich habe versucht, eine abgespeckte Version von Ihnen nicht mit redis und es hat funktioniert. Mit Blick auf die connect-redis-Dokumente sieht es so aus, als müssten Sie eine Sitzung an connect-redis übergeben. Sie übergeben es gerade Express. Ich glaube, dass das Ändern Ihr Problem beheben wird.

P.S. Ich würde Ihre Node / Express-Versionen als aktuelle Versionen von Express aktualisieren nicht mehr die integrierte Middleware zusammen mit anderen Verbesserungen.

Neuere Versionen von express:

%Vor%

Statt:

%Vor%     
Cody Gustafson 08.09.2015 03:46
quelle