2016-06-28 21 views
1

Ich habe anderswo nach dieser Antwort gesucht, aber ich habe nichts gefunden.Passport-Konfigurationssitzung Optional?

Der Pass Dokumentation Konfiguration: http://passportjs.org/docs/configure bedeutet, dass die ‚Sitzung‘ Teil ist optional. Später in der Dokumentation auch impliziert es diese Einstellung, wenn persistent Login-Sitzungen verweisen:

If your application uses persistent login sessions, passport.session() middleware must also be used.

Ich kenne die meisten realen Anwendungen wäre eine persistente Sitzung erfordern, sondern zu Lernzwecken, ich versuche, diese schrittweise aufzubauen und wollen habe Login-Arbeit und umleiten zu einer Erfolgsseite ohne Pass, der versucht, meinen Benutzer zu serialisieren.

Zur Zeit habe ich sowohl ein falsches Passwort als auch einen schlechten Benutzernamen, der korrekt auf eine Fehlerseite umleitet. Wenn ich gute Anmeldeinformationen eingeben und den Benutzer in der Datenbank suchen, werde ich nicht zur Erfolgsseite umgeleitet. Stattdessen bekomme ich folgende Fehlermeldung:

Error: Failed to serialize user into session 

Ich weiß Hinzufügen der folgenden wird das Problem beheben:

passport.serializeUser(function(user, done) { 
    done(null, user.id); 
}); 

passport.deserializeUser(function(id, done) { 
    User.findById(id, function(err, user) { 
    done(err, user); 
    }); 
}); 

Wie konfiguriere ich Pass nicht meinen Benutzer serialisiert? Ist das überhaupt möglich?

+0

Verwenden Sie einfach Sitzungen, es ist buchstäblich nur paar Zeilen Code, um es zum Laufen zu bringen. 'app.use ('session (...));' und 'app.use (pass.session());' Sie müssen das Express-Sitzungspaket 'npm install express-session' installieren und benötigen es, bevor Sie es können benutze es 'var session = require ('express-session')'. Das ist es. – Molda

+0

@Molda einige Leute es vorziehen, eine andere Methode der Verfolgung des Authentifizierungsstatus (wie unter Verwendung von JWT, oder wenn Sie die Implementierung eine Webapp, die nicht von den Browsern verbraucht werden wird) zu verwenden, so dass ich denke, es ist eine berechtigte Frage :) – robertklep

+0

@robertklep stimme ich voll und ganz zu. Aber wie in Frage erwähnt ** "für Lernzwecke" ** Ich dachte, es wäre der einfachste und schnellste Weg, um es zum Laufen zu bringen, ich habe definitiv nicht versucht, es als eine beste Lösung zu empfehlen. Ich benutze JWT selbst. – Molda

Antwort

0

Sie erhalten diesen Fehler, wenn Sie nicht explizit disable session support in den Aufruf an passport.authenticate().

+0

Der Link, den Sie zum Deaktivieren der Verwendung der permanenten Sitzungen für die Authentifizierung auf nachfolgende Anfragen zur Verfügung gestellt ist, und stattdessen erfordern die Anrufer die immer liefern grundlegende Authentifizierungsdaten Meine Frage bezieht sich auf einen Fehler während der Anmeldung und Erstellung der Sitzungskonfiguration. –

+0

@MillieWalsh diese Art von richtig, ja, obwohl es nicht an [Basic Authentication] gebunden ist (https://en.wikipedia.org/wiki/Basic_access_authentication). Es kann auch sein, dass der "success" -Handler der Authentifizierung ein Token festlegt oder zurückgibt, das an nachfolgende Anfragen weitergegeben werden sollte (kombiniert mit einer benutzerdefinierten Middleware, um deren Gültigkeit zu überprüfen) – robertklep