如何覆盖node.js express会话的会话ID(使用护照)

我正在实施一个调用我们内部authentication服务的护照策略。 内部auth服务生成会话ID,所以我需要确保连接会话使用该ID而不是默认生成的ID。

有没有办法做到这一点? 是否有可能提供我自己的钩子函数来连接产生会话ID? 我无法想象它像设置session.id或类似的东西那么简单,因为我无法控制连接实际创build会话的时间或方式。

有没有人解决了这个问题?

Connect的会话中间件的当前实现不能完成,但是您可以分叉会话中间件并更改会话ID的生成方式,即:

https://github.com/senchalabs/connect/blob/master/lib/middleware/session.js#L202

“叉”我的意思是复制上面的文件,改变sessionID的分配和使用你的新文件,而不是configuration会话中间件。

更新:

以下是我将如何使用自定义ID重新生成会话(注意 – 这只是一个想法,我还没有testing过):

// this is the function you'll be calling in your routes or whatever req.regenerateSession = function(newSid) { // keep old session data var oldSessionData = req.session; // destroy current session and make a new one with your custom id store.destroy(req.sessionID, function() { store.generate(req, newSid); // copy back the session data // since you don't want to lose it probably req.session = oldSessionData; }); } // replace the session store generate function to accept a custom sessionID // https://github.com/senchalabs/connect/blob/master/lib/middleware/session.js#L201 store.generate = function(req, customID) { req.sessionID = customID || utils.uid(24); req.session = new Session(req); req.session.cookie = new Cookie(req, cookie); }