我在一个 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/