So I have an application running node js with socket.io as a backend and normal javascript as frontend. My application has a login system which currently simply has the client send its login data as soon as it’s connected.
Now I figured it would be much nicer to have the login data sent along with the handshakeData, so I can directly have the user logged in while connecting (instead of after establishing a connection) respectively refuse authorization when the login data is invalid.
I’m thinking it would be best to put my additional data in the header part of the handshakeData, so any ideas how I could do that? (Without having to modify socket.io if possible, but if it’s the only way I can live with it)
As a lot of comments have pointed out below the Socket.IO API changed in their
1.0release. Authentication should now be done via a middleware function, see ‘Authentication differences’ @ http://socket.io/docs/migrating-from-0-9/#authentication-differences. I’ll include my orginal answer for anyone stuck on <1.0 as the old docs seem to be gone.1.0 and later:
Client Side:
Server Side:
Pre 1.0
You can pass a query: param in the second argument to connect() on the client side which will be available on the server in the authorization method.
I’ve just been testing it. On the client I have:
On the server:
The output on the server then looked like:
Update
3.x and later
You can pass an authentication payload using the auth param as the second argument to connect() in the client side.
Client Side:
In server side you can access it using
socket.handshake.auth.tokenServer Side: