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
}
);
有关详细信息和示例,请参阅文章。
我在一个 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
}
);
有关详细信息和示例,请参阅文章。