2012-12-05 47 views
1

我遇到了麻煩與MongoDB的會話才能正常工作。我已經設置了下面的代碼,這些代碼沒有問題就創建了用戶。存儲會話與passportjs,Express和monogodb

我也能看到我的sessions數據庫被填充,看起來像這樣:

http://wes.io/LNbg/content

問題是,我從來沒有在登錄狀態。如果我只是使用內存來存儲會話,但移動到MongoDB的時候,這是行不通的,它工作正常。這裏就是我認爲這個問題的代碼,但是你可以在這裏看到整個應用程序:http://wes.io/LNVg

passport.use(new LocalStrategy(
    function(username, password, done) { 
    console.log('Trying to log in as '.green, username); 

    User.findOne({ name: username }, function(err, user) { 
     if (err) {return done(err); } 

     if(user) { 
     console.log('Found user with the username of'.green,user); 
     done(null, user); 
     } 

     else { 
     console.log('No user found... '.red.inverse, username, password); 
     var user = new User(); 
     user.name = username; 
     user.username = username; 
     user.password = password; 
     user.save(function(err){ 
      if(err) { throw err; } 
      console.log('User created and saved'.green, user) 
      done(null, user); 
     }) 
     }; 

    }); 
    } 
)); 

passport.serializeUser(function(user, done) { 
    done(null, user); 
}); 

passport.deserializeUser(function(user, done) { 
    done(null, user); 
}); 

app.configure(function(){ 
    app.set('port', process.env.PORT || 3000); 
    app.set('views', __dirname + '/views'); 
    app.set('view engine', 'jade'); 
    app.use(express.cookieParser()); 
    app.use(express.static(path.join(__dirname, 'public'))); 
    app.use(require('less-middleware')({ src: __dirname + '/public' })); 
    app.use(express.favicon()); 
    app.use(express.bodyParser()); 
    app.use(express.logger('dev')); 
    app.use(express.methodOverride()); 
    app.use(express.session({ 
     store: store 
     , secret: 'applecake' 
     , cookie : { 
      maxAge : 604800 // one week 
     } 
    })); 
    app.use(passport.initialize()); 
    app.use(passport.session()); 
    app.use(app.router); 
}); 

編輯:這裏是會話存儲代碼:

var express = require('express') 
    , colors = require('colors') 
    , routes = require('./routes') 
    , mongoose = require('mongoose') 
    , SessionStore = require("session-mongoose")(express) 
    , store = new SessionStore({ 
     url: "mongodb://localhost/fb-session", 
     interval: 120000 // expiration check worker run interval in millisec (default: 60000) 
    }) 
    , Schema = mongoose.Schema 
    , flash = require('connect-flash') 
    , userz = require('./routes/user') 
    , http = require('http') 
    , path = require('path') 
    , passport = require('passport') 
    , LocalStrategy = require('passport-local').Strategy; 
+1

您可以發佈設置會話存儲的代碼嗎? – trebuchet

+0

我已經添加了,請讓我知道如果你能幫助 – wesbos

+0

嘗試使用https://github.com/masylum/connect-mongodb會話店 - 它完美的作品,我在完全相同的情況 – trebuchet

回答

0

原來這是一個問題與序列化和deserialze方法。這裏是我的例子,雖然它會更改爲用戶ID

passport.serializeUser(function(user, done) { 
    done(null, user.name); 
}); 
passport.deserializeUser(function(name, done) { 
    done(null, { name: name }); 
});