使用Passportjs和Redis来处理会话无法正常工作

3
我正在使用Nodejs和ExpressJS。我的应用程序部署在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和PassportJS配合使用?

1个回答

0

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

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')
    })
}));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接