2015-10-10 8 views
7

Soweit ich bis jetzt stackoverflow Antworten in Bezug auf Sitzungen persistent nach Server Neustart untersucht.Wie wird eine persistente Sitzung in Knoten js beim Neustart des Servers aufrechterhalten?

Es gibt 4 Möglichkeiten, die ich in Erwägung ziehe, mit meiner mittleren App zu tun.

  1. Cookie-Sessions https://www.npmjs.com/package/cookie-session
  2. mit JSON Web-Token (JWT) https://www.npmjs.com/package/jsonwebtoken
  3. mit connect-Mongo/connect-redis
  4. passport.js

Nun meine Zweifel, wenn Ich werde meinen Server in Mongo und Redis neu starten. Die Sitzung wird immer noch da sein, da es sich um externe Datenspeicher handelt. aber wie man meine Sitzung mit JWT und Cookie-Sitzungen persistent macht. wo sind diese Sitzungsvariablen gespeichert.

Im Falle von pass.js ist die Lösung, die ich fand, Session-persistent zu machen, Sitzungsdaten in connect-mongo/connect-redis zu speichern.

Gibt es einen anderen Weg im Pass, um Sitzungen persistent zu machen?

Antwort

5

Wenn Sie die Sitzung auf einem externen Speicher speichern, sollte sie nach dem Neustart verfügbar sein.

Passport ist nicht für Sitzungen verantwortlich. Sie richten die Sitzung unabhängig vom Pass in Express ein. Passport ist eine Authentifizierungs-Middleware mit einer Strategie für die Verwendung Ihrer Sitzung. Sie Setup-Express-Sitzung:

app.use(express.session(session options)); 

und nach, dass Sie init und Setup-Pass-Sitzung verwenden:

app.use(passport.initialize()); 
app.use(passport.session()); 

Es bedeutet, dass unabhängig davon, ob Sie Reisepass oder nicht, Session-Konfiguration die gleiche sein wird, .

gibt es einige Möglichkeiten, um Sitzungen persistent zu machen: Die meisten speichern Sitzung in db oder im Dateisystem (Speicher ist nur in dev env). Bitte schauen Sie sich diese npm Suchliste link an.

Liste des kompatibelen Session Stores von offizieller Express-Session-Seite https://github.com/expressjs/session#compatible-session-stores

Jwt Token, wenn, ist ordnungsgemäß umgesetzt staatenlos. Dies bedeutet, dass Ihr Server keine Sitzungsdaten speichert. Er weiß nicht, wie viele Sitzungen gültig sind. Sie autorisiert die Anfrage, wenn sie ein gültiges JWT-Token hat.

JWT-Token kann einige Daten wie Ihre Benutzer-ID speichern. Wenn Ihr Server ein Token empfängt, dieses dekodiert und validiert, haben Sie Zugriff auf Daten von diesem Token.Bitte lesen Sie diesen Artikel für weitere Informationen:

https://stormpath.com/blog/jwt-the-right-way/

Wichtigste Teile (es gibt wichtigere Dinge sind butthese manchmal vergessen):

immer die Unterschrift überprüfen, bevor Sie irgendwelche Informationen vertrauen auf die JWT

und:

enthalten keine sensiblen Daten in einem JWT

an diesem Modul Bitte schaue dir die jwt halten:

https://www.npmjs.com/package/json-web-token

oder sogar für einige Hybrid-Lösung Modul (redis Sitzung mit jwt Token):

https://www.npmjs.com/package/jwt-redis-session

+0

dank für die Antwort, habe ich auch über https://www.npmjs.com/package/memcachedmemcached gehörtmeine Frage ist Memcached ist schneller als Redis? Wenn es das ist, was würdest du vorschlagen, alle Vor- und Nachteile zu berücksichtigen? – romir

+0

Es ist ein Speicher. Daher sollte es schneller sein, aber Sitzungsdaten sind nicht persistent. Schau dir diese Antwort an (es geht um PHP, aber dieser Fall ist ähnlich) http://stackoverflow.com/a/13946349/4138339 –

+0

Ich bearbeite den Beitrag und füge diesen Link hinzu: https://github.com/expressjs/session#compatible -Session-Stores –

Verwandte Themen