Anhaltende Sitzungen mit Pass, Mongodb und Express
Ich verwende Passport für die Authentifizierung und Sitzungen in meiner Anwendung. Ich halte an Sitzungen mit Mongostore für Mongodb fest.
Das Setup funktioniert im Allgemeinen gut. Wenn ich den Server jedoch neu starte, werden alle Benutzer abgemeldet, sodass anscheinend Sitzungen im Speicher gehalten werden, anstatt nur auf Mongodb zu bleiben. Ich versuche ein Setup zu erreichen, bei dem Benutzer beim Neustart des Servers noch angemeldet sind.
Die Grundkonfiguration ist wie folgt
Middleware app.use(express.cookieParser('your secret here'));
app.use(express.session());
app.use(passport.initialize());
app.use(passport.session({
maxAge: new Date(Date.now() + 3600000),
store: new MongoStore(
{
db: mongodb.Db(
conf.mongodbName,
new mongodb.Server(
'localhost',
27017,
{
auto_reconnect: true,
native_parser: true
}
),
{
journal: true
}
)
},
function(error) {
if(error) {
return console.error('Failed connecting mongostore for storing session data. %s', error.stack);
}
return console.log('Connected mongostore for storing session data');
}
)
}));
Reisepasspassport.use(new LocalStrategy(
{
usernameField: 'email',
passwordField: 'password'
},
function(email, password, done) {
console.log('user %s attempting to authenticated', email);
return User.findOne({email:email}, function(error, user) {
if(error) {
console.error('Failed saving user %s. %s', user.id, error.stack);
return done(error);
}
if(!user) {
return done(null, false);
}
console.log('user %s logged in successfully', user.id);
return done(null, { //passed to callback of passport.serializeUser
id : user.id
});
});
}
));
passport.serializeUser(function(user, done) {
return done(null, user.id); //this is the 'user' property saved in req.session.passport.user
});
passport.deserializeUser(function (id, done) {
return User.findOne({ id: id }, function (error, user) {
return done(error, user);
});
});
Github Repo (einschließlich des gesamten Codes, der zum Ausführen des Codes erforderlich ist)Ich habe ein Barebone-Github-Repo mit dem Code erstelltHier
Erstellen Sie einfach eine conf.js-Datei im Stammverzeichnis mit Ihren mongodb-Anmeldeinformationen, d. h. mongodbURL und mongodbName. Führen Sie npm install und node app.js aus, um loszulegen.
Vielen Dank