node.js + socket.io马上authentication

套接字连接后是否可以运行validation? 现在我这样做:

io.sockets.on('connection', function (socket) { socket.on('login', function (token) { // this is where I currently authtificate users }); }); 

如果我没有错,在这种情况下套接字打开“连接”并挂在那里和“login”事件可能永远不会被调用。 如果有人想攻击我的服务器,他们可以打开成千上万的套接字连接。 我怎么能authentication“连接”,我的意思是马上? 所以,如果失败,我将能够立即closures套接字。

谢谢!

客户端尝试连接时可以运行身份validation。 Socket.io在尝试连接到服务器时有一个授权客户端的机制,但默认情况下禁用授权 。 当一个套接字尝试连接到服务器时,有一个handshake对象,这个对象具有请求查询和请求头等等。你可以通过这个强制执行授权:

 io.configure(function (){ io.set('authorization', function (handshakeData, callback) { if(handshakeData.query.token == "somevalue"){ callback(null, true); // this will allow the client to connect }else{ callback(null, false); // this will prevent the client from connecting } }); }); 

而在客户端,你可以发送一个查询string,如下所示:

 var socket = io.connect("http://yourIP:Port?token=somevalue");