【问题标题】:Node.js: Share session cookie when using mocha with passport.socketioNode.js:在使用 mocha 和 passport.socketio 时共享会话 cookie
【发布时间】:2015-08-04 14:19:01
【问题描述】:

我在一个 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,或者是否有其他解决方案?

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

【问题讨论】:

  • 让我非常惊讶的是,这个问题很少受到关注(除了我之外只有 1 个赞,而且根本没有答案/cmets)。我遇到了完全相同的问题:需要测试 socket.io 与 cookie 的连接。这个任务对我来说似乎很常见,我几乎没有找到任何关于这个主题的内容。很少有人用这种方式使用socket.io?或者那些这样做的人,不关心测试?对我来说很奇怪..
  • 我想出的唯一有价值的是:我们可以检查 passport.socketio 的开发人员如何实际测试 passport.socketio:特别是,请参阅此文件:github.com/jfromaniello/passport.socketio/blob/master/test/… 它需要xmlhttprequest 并对其进行猴子修补,添加自定义 cookie。只要它与 socket.io 使用的 xmlhttprequest 完全相同,它就可以工作,并且 socket.io 从那时起发生了巨大的变化,所以现在让它工作并不是那么简单。

标签: node.js authentication socket.io mocha.js passport.js


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2014-09-06
    • 2011-09-12
    • 2013-05-25
    • 1970-01-01
    • 2015-09-04
    • 1970-01-01
    • 2016-02-22
    • 2015-01-25
    • 1970-01-01
    相关资源
    最近更新 更多