Express + Passport + Redis sessions?

3
到目前为止,我一直在使用默认的MemoryStore来处理Express会话。一切都很顺利,但是在重启后所有的会话数据都会丢失。因此,我正在尝试使用Redis和Connect-Redis来处理我的会话。
以下是与Redis会话配置相关的代码部分:
var express = require( "express" ),
    app = module.exports = express(),
    passport = require( "./passport" ),
    http = require( "http" ),
    RedisStore = require( "connect-redis" )( express ),
    redis = require( "redis" ).createClient();

app.configure(function(){

    app.set( "passport", passport );
    app.use( express.cookieParser());
    app.use( express.session({
         secret: "I can haz working sessions?",
         store: new RedisStore({ client: redis })
    }));
    app.use( passport.initialize() );
    app.use( passport.session() );
    ...

当我运行这个应用程序时,没有错误。但是当我尝试登录时,虽然它执行了初始登录,但我仍然被弹回到登录界面。好像护照无法设置cookie,或者在设置后无法读取cookie。
供参考,以下是我在护照中使用的序列化/反序列化会话的函数:
passport.serializeUser(function( user, done ) {
    done( null, {
        id : user.id,
        type : user.type,
        firstname: user.firstname,
        lastname: user.lastname
    });
});

passport.deserializeUser(function( user, done ) {
    done( null, user );
});

请问我哪里做错了?passport serializeUser / deserializeUser需要修改才能与redis一起使用吗?还是我漏掉了其他什么东西?

提前感谢您的帮助。


1
检查您的浏览器开发工具,以查看 cookie 是否已设置(并由浏览器发送回服务器)。您的代码似乎没问题。 - robertklep
听起来像是我在使用cookie会话时遇到的同样的问题:http://stackoverflow.com/questions/19011531/using-cookiesession-with-passport - Matti Lehtinen
@user1031947:你解决了问题吗?请更新。 - vivekanon
1个回答

0
一种可能性是:也许您的应用程序无法连接到Redis?我发现当我的redis-server没有运行时,我遇到了您描述的症状(无声地无法设置cookie)。
除了检查它是否正在运行之外,还要确保您的Node服务器实际上可以连接到它,也就是说,没有防火墙规则阻止您进入。
祝你好运!

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