使用带有Passportjs的redis进行会话不起作用

时间:2014-07-03 05:54:31

标签: node.js heroku express redis passport.js

我正在使用带有ExpressJS的Nodejs。我的应用程序部署在heroku上,我为我的应用程序安装了“redistogo”插件。

我正在使用PassportJS来帮助进行身份验证和会话。

我想在用户登录后使用redis存储会话,这样如果应用程序重新启动,登录用户就不会丢失会话。

这是我的代码(为简洁而剥离最少):

var RedisStore = require('connect-redis')(express);

app.configure('development', function () {
    var redisUrl = url.parse(process.env.REDISTOGO_URL),
        redisAuth = redisUrl.auth.split(':');

    app.set('redisHost', redisUrl.hostname);
    app.set('redisPort', redisUrl.port);
    app.set('redisDb', redisAuth[0]);
    app.set('redisPass', redisAuth[1]);
});

app.configure(function () {
    app.use(express.session({
        secret: 'My secret key',
        store: new RedisStore({
            host: app.get('redisHost'),
            port: app.get('redisPort'),
            db: app.get('redisDb'),
            pass: app.get('redisPass')
        })
    }));
    //Passport configuration
    app.use(passport.initialize());
    app.use(passport.session());

});

我在请求上使用request.isAuthenticated()来验证用户是否已登录。

如果用户根据控制台语句登录,我看到登录成功。 PassportJS正确记录用户。但是,request.isAuthenticated()返回false。

如果我删除redis代码并仅保留PassportJS代码,那么它可以完美运行。 我还应该做些什么来使用redis和PassortJS?

1 个答案:

答案 0 :(得分:0)

你应该使用cookie的选项将其设置为false或ture,但建议为真

app.use(express.session({
    secret: 'My secret key',

    // add this line
    cookie : {secure : true},


    store: new RedisStore({
        host: app.get('redisHost'),
        port: app.get('redisPort'),
        db: app.get('redisDb'),
        pass: app.get('redisPass')
    })
}));