4
我正在實施調用我們內部認證服務的護照策略。內部auth服務生成會話ID,所以我需要確保連接會話使用該ID而不是默認生成的ID。如何覆蓋node.js快速會話的會話ID(使用護照)
有沒有辦法做到這一點?是否有可能提供我自己的鉤子函數來連接產生會話ID?我無法想象它像設置session.id或類似的東西那麼簡單,因爲我無法控制連接實際創建會話的時間或方式。
有沒有人解決過這個問題?
我正在實施調用我們內部認證服務的護照策略。內部auth服務生成會話ID,所以我需要確保連接會話使用該ID而不是默認生成的ID。如何覆蓋node.js快速會話的會話ID(使用護照)
有沒有辦法做到這一點?是否有可能提供我自己的鉤子函數來連接產生會話ID?我無法想象它像設置session.id或類似的東西那麼簡單,因爲我無法控制連接實際創建會話的時間或方式。
有沒有人解決過這個問題?
這不能與當前的實現連接的會話中間件來實現,但你可以用叉子叉會話中間件和更改會話ID是如何產生的,即這一行:
https://github.com/senchalabs/connect/blob/master/lib/middleware/session.js#L202
通過「叉」我的意思是複製上面的文件,更改sessionID的分配,並在配置會話中間件時使用新文件。
UPDATE:
下面我將如何重新用自定義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);
}
謝謝。下面的工作是否會起作用,而不是分叉文件? – Jake
我想你忘了粘貼東西..?繼什麼? – alessioalex
抱歉,輸入重點提交。謝謝。不過,我不清楚我如何獲得自定義ID,如果我分叉該文件並更改該行。在使用登錄憑證調用auth服務後,我只會擁有自定義ID,並且我相信會在創建會話後發生。你能否詳細說明解決方案的工作原理?我的想法是替換護照策略中的req.session.save,它提供了來自閉包的會話ID。即req.session.save = function(fn){this.req.sessionStore.set(authServiceId,this,fn || function(){}); 返回此; } – Jake