迄今为止,我一直在为我的 Express 会话使用默认的 MemoryStore。一切都很好,除了所有会话数据在重新启动之间丢失。所以我试图让我的会话与 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 );
});
关于我哪里出错的任何建议?护照 serializeUser / deserializeUser 是否需要修改才能与 redis 一起使用?还是我错过了其他东西?
在此先感谢您的帮助。