我正在尝试使用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 访问“受保护”查询对象,但我不想这样使用它,因为它很脏。
答案 0 :(得分:5)
旧的
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'));
}
});