2014-09-10 73 views
0

我有一個使用Redis存儲會話狀態的api。這對需要身份驗證的api路由非常有用。當不需要授權時,阻止在Redis中創建會話

但是,我有一些不需要身份驗證的路由。當這些路由被命中時,在Redis中創建一個新的會話密鑰(除非用戶已經被認證),但是該值不包含任何有用的信息。我想阻止在Redis中創建這些無用的條目。

我遇到的麻煩是會話在我的路由處理程序執行前被創建。所以在創建會話時,我不知道路由是否需要身份驗證。

var sessionware = express.session({ ... session options ...}); 

    app.use(function session(req, res, next) { 
    // if i knew i didn't need to save the session inside here, i could avoid doing so 
    // but I have no good way of knowing that. 
    sessionware(req, res, next); 
    }); 

我錯過了什麼嗎?這似乎是一個相當常見的情況,但我無法在任何地方找到很多。

回答

1

有至少有幾個方面去了解這一點:

  • 你可以寫根據請求的屬性(如中間件,只有執行會話中間件基於標頭值,餅乾,請求URL /路徑等)。

  • 上述變體中,您有一個自定義中間件功能,首先檢查會話cookie,如果存在,它會在redis中查找會話密鑰。如果存在,請調用會話中間件。

  • 使用會話中間件獲取單個路由。例如:app.post('/foo', session, function(req, res) {})

  • 通過首先包含它們,然後使用會話中間件和經過身份驗證的路由,分離未經驗證的路由。

相關問題