Socket.IO查询对象未在授权数据中定义

时间:2014-07-05 15:39:48

标签: node.js angularjs socket.io

我正在尝试使用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 访问“受保护”查询对象,但我不想这样使用它,因为它很脏。

1 个答案:

答案 0 :(得分:5)

根据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'));
    }
});