到目前为止,我一直在为Express会话使用默认的MemoryStore。除了在重新启动之间丢失所有会话数据之外,一切都运行良好。所以我想让我的会话与Redis&改为连接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后无法读取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 );
});
关于我哪里出错的任何建议?是否需要修改护照serializeUser / deserializeUser以使用redis?或者我错过了其他什么?
先谢谢你的帮助。
答案 0 :(得分:0)
一种可能性:也许您的应用无法连接到Redis?我发现当我的redis-server没有运行时,我遇到了你描述的症状(默默无法设置cookie)。
除了检查它是否正在运行之外,请确保您的节点服务器实际上可以连接到它 - 即没有防火墙规则阻止您。
祝你好运!