Nodejs + Passport.js + Redis:如何在Redis中存储会话

f1n*_*1nn 14 session redis node.js passport.js

我已经读过这个话题Node.js + express.js + passport.js:在服务器重启之间保持身份验证,我需要完全相同的东西,但对于Redis.我用过这样的代码:

var RedisStore = require('connect-redis')(express);
app.use(express.session({
    secret: "my secret",
    store: new RedisStore,
        cookie: { secure: true, maxAge:86400000 }
}));
Run Code Online (Sandbox Code Playgroud)

它不起作用.要连接Redis,我使用connect-redis模块.我做错了什么?谢谢!

UPD:我没有收到任何错误.为了成功确保身份验证过程,我添加了日志行,然后执行.

function(email, password, done) {
    // asynchronous verification, for effect...
    process.nextTick(function() {
        findByEmail(email, function(err, user) {
            if (!user) {
                return done(null, false, {
                    message: 'Unknown user ' + email
                });
            }
            if (user.password != password) {
                return done(null, false, {
                    message: 'Invalid password'
                });
            }
            //just logging that eveything seems fine
            console.log("STATUS: User " + email + " authentificated succesfully");
            return done(null, user);
        })
    });
}));
Run Code Online (Sandbox Code Playgroud)

使用express.logger()的日志是:

127.0.0.1 - - [Fri, 19 Oct 2012 05:49:09 GMT] "GET /ico/favicon.ico HTTP/1.1" 404 - "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4"
STATUS: User admin authentificated succesfully
Run Code Online (Sandbox Code Playgroud)

想有什么错AUTH /用户/凭证/串行化/反序列化本身.问题是护照无法设置cookie到Redis并阅读它.

f1n*_*1nn 5

我应该用

cookie: { secure: false, maxAge:86400000 }
Run Code Online (Sandbox Code Playgroud)

  • 设置`secure:false`意味着您的会话cookie可以在没有SSL的情况下发送,这使您容易受到会话劫持的攻击.http://en.wikipedia.org/wiki/Session_hijacking (2认同)
  • 使用cookie而不是会话不是一个好主意. (2认同)
  • 假设问题“如何在 Redis 中存储会话”仅适用于将 `secure` 设置为 `false`,这听起来不太公平。这是您的用例。 (2认同)