2015-05-22 40 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 
    } 
); 

看到这篇文章的细节,例如。