よし、これがシナリオだ。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 です...私のパスポートが私のセッションを正しくロードしたとしても。
考え?