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

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

有没有办法设置要在握手中发送的其他 header 或在请求和套接字连接之间共享 cookie jar 或者是否有其他解决方案?

(有一个过时的“hack”解决方案,但它不再起作用 jfromaniello/passport.socketio#72)

最佳答案

我也在为此苦苦挣扎,在我弄清楚之后,我写了一篇关于它的文章: Testing Socket.io + Passport.socketio with Mocha

简而言之,我无法在握手请求中注入(inject) cookie,但是 Passport.socketio 允许我们将 session_id 作为查询参数传递,如下所示:

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

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

关于Node.js:在使用 mocha 和passport.socketio 时共享 session cookie,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30398732/

10-13 04:32