node + express + redis持久会话/记住我

时间:2014-05-12 18:17:15

标签: node.js session express remember-me

我正在开发节点和表达。而我正在努力记住我的登录信息。我正在网上阅读很多内容,但无法使其发挥作用。我不知道是否有食谱,如果有,我无法找到它。

我正在尝试使用redis和表达会话。而且正在部分工作。 如果重新启动节点服务器,或关闭并重新打开chrome。会话有效。所以进入" /"会将我重定向到" /index.html"。

但如果我重新启动电脑,我就失去了会话。所以进入" /"将重定向到"登录" 这是我服务器的一些重要代码:

var redisClient = require('redis').createClient();
var RedisStore = require('connect-redis')(express);
app.use(bodyParser());
app.use(cookieParser());
app.use(express.session({
  store: new RedisStore({
    host: 'localhost',
    port: 6379,
    db: 0,
    cookie: { maxAge: (24*3600*1000*30)}, // 30 Days in ms
    client : redisClient
  }),
  secret: 'seeeecret'
}));

app.get('/', function(req, res, next) {
    res.redirect('/index.html');
});

app.post('/login', function(req, res) {
    function loginSuccess() {
        req.session.regenerate(function() {
            req.session.user = req.body.usuario;            
        res.sendfile('index.html', {root: './static'});
        });
    }
    function loginFailure(errText, errCode) {
        console.log("failed to login. "+errCode+": "+errText);
        res.redirect('/login');
    }
    //Imap email login (the user will authenticate with his email, end email's pass)
    checkPassword(req.body.usuario, req.body.server, req.body.password, loginSuccess, loginFailure);
});

function restrict(req, res, next) {
    if (req.session.user) { 
        next();
    } else {
        req.session.error = 'Access denied!';
        res.redirect('/login'); 
    }
}

1 个答案:

答案 0 :(得分:0)

好像你有" cookie"在错误的地方:

app.use(express.session({
  cookie: { maxAge: (24*3600*1000*30)}, // <-- where it belongs
  store: new RedisStore({
    host: 'localhost',
    port: 6379,
    db: 0,
    client : redisClient
  }),
  secret: 'seeeecret'
}));