Uso il passaporto per gestire l'autenticazione e le sessioni nella mia applicazione. Sto persistendo sessioni a mongodb usando mongostore.sessioni persistenti con passaporto, mongodb ed express
L'installazione funziona bene in generale. Tuttavia, quando riavvio il server, tutti gli utenti vengono disconnessi, quindi apparentemente le sessioni vengono mantenute in memoria anziché essere mantenute solo su mongodb. Sto cercando di ottenere una configurazione in cui gli utenti sono ancora loggati quando si riavvia il server.
configurazione di base è la seguente
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');
}
)
}));
passaporto
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 pronti contro termine (incluso tutto il codice necessario per eseguire il codice)
ho creato un barebone github repo compreso il codice here
è sufficiente creare un file conf.js nella directory root con le credenziali mongodb, ad es. MongodbURL e mongodbName, eseguire npm install e node app.js per iniziare.
grazie
In realtà non scrivere dati su disco è ciò che rende la scala Web di mongodb ;-) Vedi http://www.youtube.com/watch?v=b2F-DItXtZs – jarmod