今日まで、私は 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 で動作するように変更する必要がありますか? それとも、他に何か不足していますか?
(事前に)ご協力いただきありがとうございます。