2014-05-01 294 views
23

我想,当socket.io客户端发出连接请求,设置一个HTTP头文件时设置请求头。有没有办法做到这一点?socket.io客户端如何进行连接

下面是我在做什么:

// server side 
var io = socketio(server); 

io.use(function (socket, next) { 
    // authorize using authorization header in socket.request.headers 
}); 

// client side 
var socket = io(); // i'm trying to set an authorization header in this http reqeust 

任何想法?谢谢。

+0

当套接字客户端发出请求,它已经请求头与它。你是说,你要改变这些,或者你只是想从套接字客户端发送一些记号,并根据您要授权客户端的令牌???? –

+0

我想在标题中发送一个标记。 @MOmayr – Ziyu

+0

您可以在查询字符串中发送该令牌并在授权功能中对其进行检查。我应该给你一个例子吗? –

回答

-3

这个信息,因为socket.io 1.0

已被弃用,有授权的方法有两种:全局或命名空间(思路线)。全局方法在配置调用io.set('authorization', function (handshakeData, callback)的服务器上设置。

的handshakeData对象包含下列信息:

{ 
    headers: req.headers  // <Object> the headers of the request 
, time: (new Date) +''  // <String> date time of the connection 
, address: socket.address() // <Object> remoteAddress and remotePort object 
, xdomain: !!headers.origin // <Boolean> was it a cross domain request? 
, secure: socket.secure  // <Boolean> https connection 
, issued: +date    // <Number> EPOCH of when the handshake was created 
, url: request.url   // <String> the entrance path of the request 
, query: data.query   // <Object> the result of url.parse().query or a empty object 
} 

的上述信息和更深的解释是可在此 documentation page

+1

'io.set('authorization')'实际上在1.0中已被弃用:http://socket.io/docs/migrating-from-0-9/ –

11

这似乎是client doesn't support setting headers,因为不是所有的传输允许头的设置。

post通过facundoolano详细的解决方法,不需要放置身份验证令牌在查询字符串认证。

他的解决方法模块可以在https://github.com/invisiblejs/socketio-auth找到。

使我不知道为什么在服务器端,socket.io允许被访问的请求头......

+0

Socket.io握手(即使是WebSockets)也以常规REST调用和进一步提升到WebSocket协议,所以答案似乎是错误的,另一方面,如果您使用的HTTP请求头比这应该工作正常... – Lu4

22

您可以使用extraHeaders选项,如果你使用socket.io客户端> = 1.4。

例如:

var socket = io("http://localhost", { 
    extraHeaders: { 
    Authorization: "Bearer authorization_token_here" 
    } 
}); 

engine.io-client,这是socket.io客户端,introduced extraHeaders support on 2015-11-28的后端。

+8

虽然这似乎是一个很好的选择,它使用NodeJS客户端时,但不在浏览器中。它在读到我的时候说,这可能是bakavic上面第一个链接的答案(不是所有的传输都允许设置自定义标题) –

+0

截至昨天,它在某些浏览器上不支持,因为有一个bug ,我已经修复了:) – Lu4

+2

真棒,你如何获得服务器端的标题呢? – TheJKFever

相关问题