好的,这就是场景。我让用户使用 facebook 登录我的应用程序。发生这种情况时,Passport 会将其保存到 Session (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并应用了它......但我的会话在我的套接字中始终为空。
这就是我所拥有的。
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) { ...
会话始终为空......即使我的护照已正确加载我的会话。
想法?