【问题标题】:Passport sessions persistance护照会话持久性
【发布时间】:2014-04-23 16:54:39
【问题描述】:

我正在做一个带有 express、passport 和 mysql 数据库的 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')
}

谢谢

【问题讨论】:

    标签: node.js express passport.js


    【解决方案1】:

    您可以配置express-session 以在会话cookie 上设置Max-Age

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

    【讨论】:

    • 谢谢!它对我有用。我错过了 maxAge 属性;)
    猜你喜欢
    • 2016-07-28
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-25
    相关资源
    最近更新 更多