Node.js / Express - 如何通过方法(使用套接字)访问会话数据?

时间:2016-06-18 01:47:39

标签: javascript node.js sockets session express

我在会话中存储了一些Oauth数据,现在我想再次访问它,所以我创建了一个本地API端点来提供该访问令牌。看来,如果我通过方法发出请求,它不包含请求体,因此它实际上无法获得req.session.access_token

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

//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){...}
  ...
});

我也对替代解决方案持开放态度。如何才能切实访问会话数据?感谢您的耐心等待。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

要通过套接字访问会话数据,您需要使用https://www.npmjs.com/package/express-socket.io-session

之类的插件

使用此功能,您可以通过套接字调用访问会话数据。