3

今日まで、私は 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 で動作するように変更する必要がありますか? それとも、他に何か不足していますか?

(事前に)ご協力いただきありがとうございます。

4

1 に答える 1