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

时间:2012-05-22 12:50:50

标签: session node.js express connect

我正在实施一种调用我们内部身份验证服务的护照策略。内部auth服务生成会话ID,因此我需要确保connect会话使用该ID而不是默认生成的ID。

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

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

1 个答案:

答案 0 :(得分:2)

使用Connect的会话中间件的当前实现无法做到这一点,但您可以分叉会话中间件并更改会话ID的生成方式,即此行:

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

“fork”是指在配置会话中间件时复制上面的文件,更改sessionID的分配和使用新文件。

更新:

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

// 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);
}