1

よし、これがシナリオだ。Facebookでユーザーにアプリにログインさせます。これが発生すると、Passport はそれをセッション (req.user) に保存します。これは、リクエスト オブジェクトにアクセスできるページで作業しているときはうまく機能しますが、リクエストにアクセスできない状況に陥り、ユーザー オブジェクトを確認する必要があります。

適例。私は socket.io を使用していますが、ソケットとその周辺のメソッドを操作しているときに、リクエスト オブジェクトにアクセスできないため、ユーザー情報を取得できません。

可能な限りグローバルに近づかないようにする必要があるとよく耳にしますが、それを回避する方法がわかりません。

考え?

以下は、ソケットを使用した私の例です。このモジュールは、server.js ファイルから呼び出されます。

function loadSockets(io)
{
    var articleCommand = require('./middleware/ArticleCommand');

    io.sockets.on('connection', function (socket) {
        socket.on('getArticles', function(){
            if (NEED USER INFO HERE !== null){
                articleCommand.getArticlesByUser(NEED USER INFO HERE, function(error, articles){
                    io.sockets.emit('articlesRetrieved', error, articles);
                });
            }
        });
    });
}

exports.loadSockets = loadSockets;

アップデート

わかりましたので、コメンターのアドバイスに基づいて、これをインストールしました: https://github.com/aviddiviner/Socket.IO-sessionsとそれを適用しました...しかし、ソケットでは私のセッションは常にnullです。

これが私が持っているものです。

var socket = sio.enable({
    socket: io.listen(server, {'log level': 1, 'heartbeat': false}),   
    store:  mystore,                // this is my Redis store
    parser: express.cookieParser()
});

後で...ソケットを処理するとき

socket.sockets.on('connection', function (socket, session) { ...

セッションは常に null です...私のパスポートが私のセッションを正しくロードしたとしても。

考え?

4

1 に答える 1