Socket.io v2.0でnode.jsからsocket.io-clientを使う際にcookieを設定するには

node.jsでsocket.ioのテストを書く際にあれどうやってcookieつけるんだっけとちょっと困ったのでメモ。(ブラウザでsocket.ioを使う場合は、勝手にcookieをつけてくるので気にする必要はないです)

 

socket.io v2.0ではextraHeadersというオプションでcookieが付けられます

公式のドキュメントのextraHeadersというオプションの記述。

github.com

With extraHeaders

This only works if polling transport is enabled (which is the default). Custom headers will not be appended when using websocket as the transport. This happens because the WebSocket handshake does not honor custom headers. (For background see the WebSocket protocol RFC)

このオプションを使ってcookieを設定すれば、普通に認証できそう・・・・と思ったのですが、

クライアントがpollingでsocket.ioサーバに接続した場合にしか使えないオプションらしい。

 

websocketオンリーでsocket.ioを使う際にcookie認証できないの?

公式のドキュメント見ている限りでは方法がなさそう。

そもそもsocket.io的には、まずは全員pollingで接続してくれ、そのあとにwebsocketに移行してくれという方針らしい。

うーーーーーんなんだか微妙ですね・・・・・。いきなりwebsocket接続するようなクライアントは認証ができなくなってしまいそう。

 

socket.ioがonopenになった後に認証用のメッセージングを実行したほうがいいのかもしれませんね。