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');
            }
        )
    }));
Reisepass
passport.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

Antworten auf die Frage(1)

Ihre Antwort auf die Frage