Joe*_*sis 35 javascript sockets authorization node.js socket.io
我想知道授权的主要功能和Socket.IO中的握手是什么.我已经在GitHub上阅读了他们的wiki和授权指南,但我仍然不明白以下内容:
handshakeData对象添加任何内容吗?我希望你能回答我的问题.谢谢.
hex*_*ide 65
编辑:在Socket.IO 1.0中,现在使用中间件.授权可以这样完成:
io.use(function(socket, next) {
var handshake = socket.request;
next();
});
Run Code Online (Sandbox Code Playgroud)
如果您需要拒绝套接字,只需将错误对象传递给next()回调.命名空间可以做同样的事情:
io.of('/namespace').use(function(socket, next) {
var handshake = socket.request;
next();
});
Run Code Online (Sandbox Code Playgroud)
Socket.IO中的授权通过一个函数运行,该函数由一个由回调传递的布尔值决定.每次连接尝试握手时,此函数都会运行,这就是它的样子:
io.set('authorization', function (handshake, callback) {
callback(null, true);
});
Run Code Online (Sandbox Code Playgroud)
该函数callback()接受两个参数.第一个是错误原因,如果有的话,第二个参数是布尔值,它决定客户端是否可以连接.默认情况下没有授权,因此该场景显示在上面的代码示例中,其中允许连接的套接字通过true.
Socket.IO中的握手就像任何其他与信息技术相关的握手一样.这是协商过程,在Socket.IO的情况下,决定客户端是否可以连接,如果没有,则拒绝连接.握手是使用XHR或JSONP请求启动的,并且在未指定授权时执行的操作不会很多,但可以对handshake数据对象中传递的数据有所帮助.
要回答您的上一个问题,是的,您可以在handshake对象中添加任何内容.该对象是对象的相同变量引用socket.handshake,它允许您执行以下操作:
io.set('authorization', function (handshake, callback) {
handshake.foo = 'bar';
callback(null, true);
});
io.sockets.on('connection', function(socket) {
console.log(socket.handshake.foo); // bar
});
Run Code Online (Sandbox Code Playgroud)
这非常有用,因为您可以存储基于套接字的属性.这种情况的一个常见用途是使用Express框架,其中可以根据Socket.IO传递的cookie识别会话ID,然后可以识别匹配的会话.
小智 11
从Socket.io 1.0开始,尽管存在向后兼容性,但建议使用"io.use()"来添加ad-hoc中间件,因此在Node Server端:
io.use(function(socket, next){
var joinServerParameters = JSON.parse(socket.handshake.query.joinServerParameters);
if (joinServerParameters.token == "xxx" ){
next();
} else {
//next(new Error('Authentication error'));
}
return;
});
Run Code Online (Sandbox Code Playgroud)
在客户端,要将自己的属性添加到握手中,它看起来像这样:
var joinServerParameters = { token: "xxx" };
var socket = io.connect('url' , {query: 'joinServerParameters=' + JSON.stringify(joinServerParameters) });
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31721 次 |
| 最近记录: |