繁体   English   中英

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

[英]Node.js/Express - how to access session data through method(using sockets)?

我在会话中存储了一些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){...}
  ...
});

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

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

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

有了这个,您可以通过套接字调用访问会话数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM