Node.js:与 passport.socketio 一起使用 mocha 时共享 session cookie

Node.js: Share session cookie when using mocha with passport.socketio

我在一个 Node.js 项目中工作,我们使用护照进行身份验证。为了将身份验证桥接到 socket.io/engine.io,我们使用 passport.socketio 包。这在浏览器中效果很好,因为可用的 cookie 是在初始套接字中发送的。io/engine.io 通过 HTTP 完成的握手。

当我们尝试使用 mocha 为套接字编写测试时 API 然而,通过带有模块请求的护照 HTTP 调用首次登录,我们无法找到一种方法来传递接收到的 session cookie使用 socket.io-client(即使用 engine.io-client)初始连接。因此我们找不到在 mocha 中编写这些测试的方法。

有没有办法设置额外的 headers 在握手中发送或在请求和套接字连接之间共享一个 cookie jar 或者有其他解决方案吗?

(有一个过时的 "hack" 解决方案,但它不再有效 jfromaniello/passport.socketio#72)

我也曾为此苦苦挣扎,在弄明白之后,我写了一篇关于它的文章: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
  }
);

有关详细信息和示例,请参阅文章。