2014-04-23 2 views
3

나는 express, passport 및 mysql db로 webapp를하고있다.Passport 세션 지속성

사용자가 내 데이터베이스의 테이블에 저장됩니다. 사용자가 로그인 할 때 응용 프로그램은 db의 사용자 탭에 항목을 찾고 사용자가 인증 된 경우 사용자를 인증합니다. 모든 것이 작동하지만 사용자가 브라우저를 닫으면 세션이 삭제되고 다시 로그인해야합니다. 사용자가 명시 적으로 로그 아웃 할 때까지 로그인하고 싶습니다.

express-mysql-session 플러그인을 사용해 보았는데 db 테이블에 세션을 저장하지만 그 이상은 저장하지 않습니다.

var passport = require("passport"); 
var LocalStrategy = require('passport-local').Strategy; 
var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 
var session = require('express-session'); 
var SessionStore = require('express-mysql-session'); 

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

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

passport.use(new LocalStrategy(function(username, password, done) { 
    process.nextTick(function() { 
     console.log('passport: veryfing user ...'); 
// sequelizejs looks for user...    
tabUser.find({ where: {nick: username, passwd: password}  }).success(function(myUser) { 
      if (myUser) { 
       console.log('passport: user authenticated !!'); 
       return done(null, myUser); 
      } else { 
       console.log('passport: auth failed !!'); 
       return done(null, false); 
      } 
}); 
}); 
})); 

app.use(session({key: 'session_cookie_name', 
     secret: 'session_cookie_secret', 
     store: new SessionStore(options) 
})); 
app.use(passport.initialize()); 
app.use(passport.session()); 

app.get('/login', function(req, res) { 
    res.sendfile('views/login.html'); 
}); 

app.post('/login', passport.authenticate('local', { successRedirect: '/loginSuccess', failureRedirect: '/loginFailure' })); 

app.get('/account', ensureAuthenticated, function(req, res) { 
    res.render('account', { user: req.user }); 
}); 

function ensureAuthenticated(req, res, next) { 
    if (req.isAuthenticated()) { 
     return next(); 
    } 
    res.redirect('/login') 
} 

감사

답변

3

당신은 세션 쿠키에 Max-Age을 설정 express-session을 구성 할 수 있습니다

이 (안 관련 세부 사항은 생략) 관련 코드입니다.

app.use(express.session({ 
    cookie : { 
    maxAge: 3600000 // see below 
    }, 
    store : new MongoStore(...) 
}); 
... 
app.use(passport.session()); 
+0

고마워요! 그것은 나를 위해 일했습니다. maxAge 특성이 누락되었습니다;) – Ico