【问题标题】:Node.js/Express - how to access session data through method(using sockets)?Node.js/Express - 如何通过方法(使用套接字)访问会话数据?
【发布时间】:2016-06-18 14:15:52
【问题描述】:

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

我也愿意接受替代解决方案。我怎样才能切实地访问会话数据?感谢您的耐心等待和查看。

【问题讨论】:

    标签: javascript node.js sockets session express


    【解决方案1】:

    使用 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 不成功,它是一种替代方案(并且也更优雅,因为它保存了一个请求:)(但也可能更难:())

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-03-26
        • 2014-02-20
        • 2012-12-15
        • 2014-03-28
        • 2016-05-17
        • 2015-12-02
        • 1970-01-01
        相关资源
        最近更新 更多