Ich versuche, Passports in meiner Nodejs App mit Express4 zu verwenden. Zu Testzwecken verwende ich Session-File-Store, um die Sitzung zu behalten.Session Probleme mit Passportjs
Die Art, wie ich die Sitzung und passportjs einzurichten:
this.app.use(session({
secret: process.env.SESSION_SECRET || configuration.session_secret,
store: new fileStore(),
resave: false,
saveUninitialized: false
}));
// config authentication
this.app.use(passport.initialize());
this.app.use(passport.session());
// Configure Passport
passport.use('local-login', new localStrategy.Strategy(
(username, password, done) => {
Services.users.authenticatePromise(username, password).then(
function(token) {
done(null, token);
},
function(err) {
done(null, false, err);
},
).done();
},
));
// Serialize user in session
passport.serializeUser((token: AccessToken, done) => {
let user = {
_token: token.accessToken,
_expiryInAt: token.expiryInMs + new Date().getTime(),
};
done(null, user);
});
passport.deserializeUser((sessionUser, done) => {
done(null, sessionUser);
});
jedoch das Problem, das ich habe, ist, dass, wenn ich nicht alles in die Sitzung schreiben, bevor Benutzer angemeldet ist, passportjs funktioniert gut. Wenn ich jedoch versuche, einige Daten in die Session zu schreiben, wie z. B. Einkaufswagendetails, ist es passwords nicht mehr möglich, das Benutzer-Token in den Sitzungsspeicher zu serialisieren. Die Anmeldung kann nicht erfolgreich sein.
Was fehlt mir?
Sie tun 'req.session = {...}' oder etwas ähnliches? I.e. Überschreiben des gesamten Sitzungsobjekts mit etwas Neuem. – robertklep
Nein, ich habe etwas wie: '' 'if (! Req.session ['basket']) { req.session ['basket'] = {}; } '' ' – rzhomx
Ah Entschuldigung, das sollte sowieso nicht das Problem sein, da es nicht serialisiert. Können Sie die Implementierungen für "pass.serializeUser/deserializeUser" zu Ihrer Frage hinzufügen? Was bedeutet _ "nicht in der Lage zu serialisieren" _ genau? – robertklep