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
- Ne pas écrire de données sur le disque est ce qui fait de mongodb à l'échelle du web 😉 Voir youtube.com/watch?v=b2F-DItXtZs
Vous devez vous connecter pour publier un commentaire.
passport.session()
de ne prendre aucune configuration de la version Express 4.X c'estsession()
vous devez configurer:Aussi,
maxAge
(ce qui devrait être une propriété decookie
) ne prend pas unDate
argument, mais seulement le nombre de millisecondes d'une session doit être valide.Pour obtenir des instructions sur l'utilisation de l'express middleware module de session, vous pouvez trouver plus d' ici.