2013-10-28 82 views
2

所以我堅持爲什麼這不起作用。每當我使用cookie作爲maxAge時,它只是不允許我登錄。它將我重定向到/,所以回調正常,但會話數據由於某種原因丟失。任何人都可以幫助我嗎?節點 - 快速 - 會話不工作?

在此先感謝。

/** 
* Module dependencies. 
*/ 

var express = require('express'); 
var routes = require('./routes'); 
var login = require('./routes/login'); 
var register = require('./routes/register'); 
var http = require('http'); 
var path = require('path'); 
var MongoClient = require('mongodb'); 

var passport = require('passport'); 
var LocalStrategy = require('passport-local').Strategy; 

var app = express(); 




// all environments 
app.set('port', process.env.PORT || 3001); 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'jade'); 
app.use(express.favicon()); 
app.use(express.logger('dev')); 
app.use(express.bodyParser()); 
app.use(express.methodOverride()); 

app.use(express.static(path.join(__dirname, 'public'))); 

app.use(express.cookieParser()); 
app.use(express.session({ 
    secret: '1234567890QWERT', 
    cookie: {maxAge: 30} 
})); 

app.use(passport.initialize()); 
app.use(passport.session()); 

app.use(app.router); 

var dbc; 
var User; 
MongoClient.connect('mongodb://127.0.0.1:27017/redacted', function(err, db) { 
    dbc = db; 
    User = dbc.collection('users'); 
}); 


passport.use(new LocalStrategy(
    function(username, password, done) { 

    User.findOne({ email: username }, function(err, user) { 
     if (password == user.password) { 
      console.log("Login success!"); 

      // Allows us to keep a log of when the user logs in in: 
      //  user['loggedin'][] 
      // db.users.update({email: ""}, { $push : {loggedin: new Date()} }) 



      if(!err) done(null, user); 
     } 
     else done(err, null) 
    }); 
    } 
)); 

passport.serializeUser(function(user, done) { 
    done(null, { 
     id: user["_id"], 
     name: user["name"], 
     email: user["email"], 
     registered: user["registered"], 
     password: user["password"] 
    }); 
}); 

passport.deserializeUser(function(id, done) { 
    console.log(id); 

    User.find({_id: id._id}, function(err, user) { 
     done(err, user); 
    }); 

}); 

// development only 
if ('development' == app.get('env')) { 
    app.use(express.errorHandler()); 
} 

app.get('/', routes.index); 



// User stuff 
app.get('/login', login.get); 
app.post('/login', 
    passport.authenticate('local', { successRedirect: '/', 
            failureRedirect: '/login?m=fail' 
           }) 
); 
app.get('/register', register.get); 
app.post('/register', register.post); 

app.get('/logout', function(req, res){ 
    req.logout(); 
    res.redirect('/'); 
}); 


http.createServer(app).listen(app.get('port'), function(){ 
    console.log('Express server listening on port ' + app.get('port')); 
}); 

回答

6

您的會話cookie被設置爲最後30ms。

根據Express documentation,maxAge以毫秒爲單位設置cookie的到期日期。

cookie: {maxAge: 30}更改爲類似cookie: {maxAge: 24*60*60*1000}的長期會話cookie。