2015-05-22 39 views
3

我正在使用Passport進行身份驗證的Node.js項目中工作。爲了將認證橋接到socket.io/engine.io,我們使用passport.socketio包。這在瀏覽器中很好用,因爲可用cookie是在通過HTTP完成的初始socket.io/engine.io握手中發送的。Node.js:與passport.socketio一起使用mocha時共享會話cookie

當我們嘗試使用mocha爲套接字API編寫測試時,通過首先通過護照HTTP模塊請求登錄,我們無法找到一種方式將接收到的會話cookie與socket.io-client一起傳遞使用engine.io-client)初始連接。因此,我們無法找到在摩卡書寫這些測試的方法。

有沒有一種方法可以設置在握手中發送額外的頭文件,或者在請求和套接字連接之間共享一個cookie jar,還是有另一種解決方案嗎?

(還有一個過時的「黑客」的解決方案,但它不工作更多jfromaniello/passport.socketio#72)

+0

這讓我很驚訝,這個問題收到如此少的關注(除了我的只有1 upvote,並沒有答案/評論)。我有完全相同的問題:需要測試與cookie的socket.io連接。這個任務對我來說似乎很常見,而且我幾乎在這個問題上找不到任何東西。很少有人用這種方式使用socket.io?或者那些做什麼,不關心測試?對我來說很奇怪 –

+0

我想到的唯一有點可貴的是:我們可以檢查passport.socketio的開發人員實際上如何測試passport.socketio:特別是看到這個文件:https:// github。 com/jfromaniello/passport.socketio/blob/master/test/fixture/setSocketIOHandshakeCookies.js它需要'xmlhttprequest'和monkey-patches它,添加自定義cookie。如果它與socket.io使用的xmlhttprequest完全相同,並且從那以後socket.io發生了巨大變化,那麼它就可以工作,因此現在就可以使它工作起來並不那麼簡單。 –

回答

3

我這個奮鬥過了,我想通了這一點後,我寫一篇關於它的文章:Testing Socket.io + Passport.socketio with Mocha

總之,我是不是能夠在握手請求注入餅乾,但passport.socketio允許我們傳遞session_id作爲查詢參數,如:

var socket = io(
    socketUrl, 
    { 
    //-- pass session_id as a query parameter 
    query: 'session_id=' + mySessionId 
    } 
); 

看到這篇文章的細節,例如。