【问题标题】:Sailsjs Session access during custom onConnect in socket.io在 socket.io 中自定义 onConnect 期间的 Sailsjs 会话访问
【发布时间】:2014-05-09 18:28:28
【问题描述】:

我正在尝试将我的所有 socket.io 连接分组。 我希望每个sails.js 会话有1 个组。 我的第一个目标是同时验证所有标签。

所以我尝试在config/sockets.js 中使用onConnect 这样做:

onConnect: function(session, socket) {
  // By default: do nothing
  // This is a good place to subscribe a new socket to a room, inform other users that
  // someone new has come online, or any other custom socket.io logic
  if (typeof session.socket == 'undefined'){
    session.socket = [];
  }
  session.socket.push(socket.id);
  session.save();

  console.log(session, socket);
},

// This custom onDisconnect function will be run each time a socket disconnects
onDisconnect: function(session, socket) {

  // By default: do nothing
  // This is a good place to broadcast a disconnect message, or any other custom socket.io logic
  if(Array.isArray(session.socket)){
    var i = session.socket.indexOf(socket.id);
    if(i != -1) {
      session.socket.splice(i, 1);
      session.save();
    }
  }
  console.log(session, socket);
},

但我意识到会话不会保存我的修改。 我尝试了session.save,但sailsjs 不知道req

Session.set(sessionKey, req.session, function (err) {

我想访问sails.js 会话,但我不知道该怎么做。

我试图搜索解决方案,但现在,经过 6 小时的搜索,我认为是时候需要一些帮助了!

感谢并为我糟糕的英语感到抱歉(我是法国人)。

【问题讨论】:

    标签: session sails.js socket.io


    【解决方案1】:

    在 Sails v0.9.x 中,onConnectonDisconnect 的实现似乎存在错误。您现在可以通过在这些方法中调用 session.save 之前添加以下行来解决它:

    global.req = {}; global.req.session = session;
    

    然后将session.save() 更改为:

    session.save(function(){delete global.req;});
    

    这将提供缺少的req var 作为全局变量,然后在保存会话后删除全局变量(为了安全起见)。

    请注意,此问题仅影响 onConnectonDisconnect 方法中的会话;在控制器代码session.save 内部应该可以正常工作。

    感谢您指出这一点!

    【讨论】:

    • 我发现这个错误在 0.10.0-rc8 版本中仍然存在,我已经尝试了解决方法,但它只是有时有效。有什么建议吗?
    猜你喜欢
    • 2017-04-22
    • 2015-10-31
    • 2023-03-09
    • 1970-01-01
    • 2021-12-06
    • 2013-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多