2016-06-18 42 views
1

我在会话中存储了一些Oauth数据,现在我想再次访问它,所以我创建了一个本地API端点来提供该访问令牌。看起来,如果我通过方法提出请求,它不包含请求主体,所以它实际上不能得到req.session.access_tokenNode.js/Express - 如何通过方法访问会话数据(使用套接字)?

如果输入到地址栏中,访问此端点将提供正确的数据,但通过方法请求时响应未定义。如果这有助于通知建议,则通过套接字调用该方法。

//This is the endpoint 
app.get('/instagram/accesstoken', function(req,res){ 
    console.log("/instagram/accesstoken: ", req.session.access_token, ", req: ", req); 
    res.json({access_token: req.session.access_token}); 
}); 

//This is the method calling the endpoint 
function getAccessToken(callback){ 
    request({url: 'http://localhost:3000/instagram/accesstoken', method: "GET"}, function(err, resp, data){ 
    console.log("getAccessToken: ", data); 
    if(err) { return callback(err); } 
    callback(null, data); 
}); 

//Sockets 
io.listen(server); 
io.on('connection', function(socket){ 
    ... 
    getAccessToken(function(err, token){...} 
    ... 
}); 

我对其他解决方案也很开放。我如何可以访问会话数据?感谢您的耐心等待,并期待您的光临。

回答

0

用于快递和socket.io的短短几天,但这里是一个有点想法:
1.您遇到的问题越来越req.session,这是从它的会话存储拿起服务器。服务器在sessionid(通常命名为sessionid或sid)的帮助下完成此操作,该浏览器存储在浏览器cookie中,该URL在每个请求的标头中发送。所以你可能应该检查请求头(在套接字连接后发出的请求),看看cookie是否被正确发送,以及它是否包括我们想要的sessionid
2.当套接字连接时,您告诉客户端在您的站点上请求accesstoken,以便服务器可以通过Oauth access_token向其他应用程序请求或发送信息(如果我理解正确的话)。由于您可能只从socket request's header获得会话ID,然后使用该会话数据获取此用户的会话数据,因此这会带来一些开销(请求太多)。但是,这可能需要稍微调整,因为框架的会话功能无法自动从req对象中检查会话ID。如果会话功能没有提供相关的功能,这可能有点困难,所以你不得不在框架中潜水。但它是一个备用,如果计划1不工作(也更优雅,因为它节省了一个请求:)(但可能更难以:())