persistante des séances avec passeport, mongodb et express

Je suis en utilisant le passeport pour gérer l'authentification et les sessions dans mon application. Je suis la persistance des sessions de mongodb à l'aide de mongostore.

L'installation fonctionne bien en général. Cependant, lorsque je redémarre le serveur, tous les utilisateurs sont déconnectés, donc, apparemment, les sessions sont gardés en mémoire au lieu d'être seulement persisté à mongodb. Je suis en train de réaliser une installation où des utilisateurs sont connectés au moment de redémarrer le serveur.

De base de la configuration est comme suit

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

passeport

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);
    });
});

dépôt github (y compris tout le code nécessaire à l'exécution de code)

J'ai créé un barebone dépôt github y compris le code ici

il suffit de créer un conf.js fichier dans le répertoire racine avec mongodb informations d'identification, c'est à dire mongodbURL et mongodbName, exécutez npm install et nœud app.js pour obtenir commencé.

grâce

InformationsquelleAutor forste | 2013-04-17