我在Node.js项目中工作,我们使用护照进行身份验证。要将身份验证桥接到socket.io/engine.io,我们使用passport.socketio包。这在浏览器中很有用,因为可用的cookie是在通过HTTP完成的初始socket.io/engine.io握手中发送的。
当我们尝试使用mocha为套接字API编写测试时,首先通过带有模块请求的通过护照HTTP调用登录,我们找不到一种方法来传递接收的会话cookie以及socket.io-client(使用engine.io-client)初始连接。因此,我们找不到在mocha中编写这些测试的方法。
有没有办法设置在握手中发送的额外标头或在请求和套接字连接之间共享cookie jar,还是有其他解决方案?
(有一个过时的“黑客”解决方案,但它不再工作jfromaniello / passport.socketio#72)
答案 0 :(得分:4)
我也在努力解决这个问题,在我想出来之后,我写了一篇关于它的文章:Testing Socket.io + Passport.socketio with Mocha。
简而言之,我无法在握手请求中注入cookie,但passport.socketio允许我们将session_id
作为查询参数传递,如下所示:
var socket = io(
socketUrl,
{
//-- pass session_id as a query parameter
query: 'session_id=' + mySessionId
}
);
有关详细信息和示例,请参阅文章。