我正在使用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') }
谢谢
您可以配置express-session以在会话cookie上设置Max-Age.app.use(express.session({ cookie : { maxAge: 3600000 // see below }, store : new MongoStore(...) }); ... app.use(passport.session());