2016-09-07 2 views
0

Ich verwende Passport.js lokale Strategien, um mit Auth in meiner App umzugehen. Ich benutze auch Nodemon, um den Server automatisch zu aktualisieren, wenn ich Änderungen mache.Passport.js Statuslos

Problem ist, wenn ich Änderungen mache, muss ich mich erneut in der Anwendung anmelden. Für den Moment ist dies nur Entwicklung, aber das gleiche Konzept würde für mehrere Server gelten, die die Anfragen bearbeiten (zB EC2 Load Balancer). Meine Frage ist also, wie kann ich Passport.js zustandslos machen und trotzdem den Zustand des Benutzers erhalten?

Scheint so, als müsste es eine Möglichkeit geben, den Status über Server und/oder Neustarts des Servers hinweg zu erhalten.

+0

Warum ist es wichtig, dass diese Anwendung genau zustandslos ist? Sie könnten Statusinformationen verbreiten, wenn Sie sich darüber Sorgen machen - ich sehe nicht wirklich, wie Sie davon profitieren. Ich versuche nur, Ihnen zu helfen, [ein XY-Problem zu stellen] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). –

+0

In der Produktion plane ich die Verwendung von EC2 Load Balancern, also grundsätzlich die Verwendung verschiedener Server für jede Anfrage, also muss ich sicherstellen, dass ein Benutzer autorisiert ist, auch wenn die Login-Anfrage auf einem separaten Server stattfand. Ich möchte nicht, dass sich der Benutzer jedes Mal anmelden muss, wenn er für jeden neuen Server eine Anfrage stellen möchte. In der Entwicklung wird es jedesmal schmerzhaft, wenn ich etwas ändere, und Nodemon startet den Server neu, um sich neu anmelden zu müssen. Ich könnte völlig falsch liegen, aber es scheint, als würde die gleiche Lösung beide Probleme beheben. –

+0

Speichern Sie Ihre authentifizierungsbezogenen Daten auf dem Redis-Server. Der Serverneustart wird Ihre Authentifizierungsdaten daher nicht löschen und das Caching wird auf dem Redis-Server viel schneller sein. –

Antwort

1

Sie haben zwei Möglichkeiten:

  1. einen persistenten Session-Speicher verwenden z.B. , Redis oder PostgreSQL
  2. Verwenden Sie keine Sitzungen überhaupt, verwenden Sie stattdessen JSON Web Tokens aka JWT.

erste Option erfordert weniger Setup, wenn Sie bereits über eine gemeinsame Datenbank haben, nur den Laden instanziiert und es dir App passieren, zB:

const session = require('express-session'); 
const MongoStore = require('connect-mongo')(session); 

app.use(session({ 
    secret: 'foo', 
    store: new MongoStore(options) 
})); 

Die zweite Möglichkeit, eine andere Passport Strategie wie passport-jwt erfordert oder Vielleicht Passport vollständig und mit direkt in einer benutzerdefinierten Middleware.

+0

Großes Detail. Vielen Dank. –

Verwandte Themen