我正在使用express,passport和mysql db进行webapp。
用户存储在我的数据库的表中,当用户登录时,应用程序在数据库的用户选项卡上查找条目,如果找到用户进行了身份验证。 一切正常,但当用户关闭浏览器时,会话被破坏,他需要再次登录。我想用户会在明确注销之前登录。
我尝试使用express-mysql-session插件,它会在他的数据库表上保存会话,但仅此而已。
这是相关代码(省略相关细节):
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')
}
由于
答案 0 :(得分:3)
您可以配置express-session
在会话Cookie上设置Max-Age
。
app.use(express.session({
cookie : {
maxAge: 3600000 // see below
},
store : new MongoStore(...)
});
...
app.use(passport.session());