【问题标题】:Socket.IO query object not defined in authorization data未在授权数据中定义的 Socket.IO 查询对象
【发布时间】:2014-07-06 21:07:12
【问题描述】:

我正在尝试使用 socket.io(版本 1.0+)进行基于令牌的 URL 身份验证,但我无法从以下内容读取查询对象:

//server code snippet

io.set('authorization', function (data, accept){
  console.log(data.query); //prints undefined
  //authentication logic...
});

//client code snippet

angular.module('app')
.factory('socket', function ($rootScope){
    var socketProvider = 'http://localhost:3000';
    var token = 'testtoken';
    var socket = io.connect(socketProvider, {'query': 'token=' + token});
    //more factory code for websocket handling...
});

套接字连接成功,我可以使用 data._query 访问“受保护的”查询对象,但我不想以这种方式使用它,因为它很脏。

【问题讨论】:

    标签: node.js angularjs socket.io


    【解决方案1】:

    根据migration guide

    旧的 io.set()io.get() 方法已弃用,仅支持向后兼容。

    相反,您可以使用类似:

    io.use(function(socket, next) {
        if (socket.handshake.query.token === 'Your valid token') {
            next();
        } else {
            next(new Error('Your error message for the client'));
        }
    });
    

    【讨论】:

      猜你喜欢
      • 2015-02-14
      • 2015-08-18
      • 1970-01-01
      • 2019-02-20
      • 1970-01-01
      • 1970-01-01
      • 2017-03-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多