2014-09-10 63 views
1

我對節點世界很新穎。我已經環顧了幾天,我找不到用現有的npm「官方」解決方案來做這件事的方法。如果有道歉,我希望能夠更好地找到合適的節點資源。Passport.js沒有cookie的會話管理

我已經實施了一個工作護照本地政策,遵循互聯網上提供的各種示例。它效果不錯

我現在想要實現會話管理,具體而言,我不想使用cookie並使用參數GET/POST來代替。其背後的原因是,我正在構建一個API服務,它可能必須使用cookie /頭不存在的自定義協議(而不是HTTP)。

我看到所有會話都支持護照實現,它們似乎都依賴於express/connect會話包,而這反過來似乎只支持cookie,並且無法讀取/寫入會話密鑰POST/GET參數。

在我推出我自己的定製解決方案之前,如果存在,您能指出我已有的任何東西嗎?

回答

0

它看起來像沒有,沒有辦法做到這一點,情況仍然是可以從這個答案推斷的:passport.js local strategy- logging in with username, authenticate later requests with token`由passport.js創建者本人。

我最終創建了自己的。 爲了記錄我使用的方法是有兩張護照策略:

  • 本地策略來處理登錄,並創建發回給用戶JWT令牌。
  • 一種承載策略,用於驗證後續請求,從GET或參數中檢索令牌,並使用存儲在令牌中的用戶標識查詢用戶數據庫。 jwt解決方案使用node-jwt-simple https://github.com/hokaccha/node-jwt-simple

這一切都有效,但我失去了輕鬆回退到基於cookie的會話的能力。希望有人比我更熟練可能能夠創建一個解決方案來做到這一點,利用標準的快速會議nmp

+0

[angular-fullstack generator](https://github.com/DaftMonk/generator-angular-fullstack)可以創建將承載策略與基於cookie的會話相結合的應用。實現jwt回退到cookie會話可能並不困難。 – CKK 2014-09-12 11:38:37

+0

是的,它看起來像它,原理看起來與我所做的非常相似。像這樣的解決方案的問題是,它迫使你在特定的框架下工作,並學習該框架,這可能會在未來受到限制,並且需要大量時間來學習,因爲文檔非常稀少。無論如何,感謝您的提示,對於節點角應用程序,它似乎是一個有趣的解決方案 – brzm 2014-09-12 14:17:10

2

所以你可以做到這一點。

passport.js將npm express-session中間件用於實際的會話基礎結構。

由於Express支持流水線任意中間件我設法使用以下解決方法:

  1. 在您的快速設置,只是快遞會議中間件之前添加的中間件功能。

  2. 在中間件功能中,檢查請求中是否存在會話標記/標識(作爲標頭或根據需要放置在主體中),如果是,請從中讀取會話標記/標識。

  3. 將會話標記/標識設置爲request.cookies對象(如果您使用的是cookie解析器)和/或附加到標頭中的序列化cookie:request.headers.cookie + = ... my new cookie去這裏...

  4. 確保你的名字的名字後,該cookie傳遞到快遞會話

快遞會話現在應該能夠把它撿起來關閉復甦的要求。

+0

我試過了,無法讓它工作。我查看了'express-session'代碼,看看他們是如何簽署sessionID的,我用相同的方式簽署cookie並將其設置爲req.cookies ['connect.sid]。我也嘗試了你所說的,即將它連接到cookie分析器中間件之前的req.headers.cookie。這也沒有奏效。即使這兩種方法都改變了req.cookies對象中的值,但並未更改通過記錄req.sessionID驗證的sessionID。那麼,我錯過了什麼,或者它不起作用?我無法讓它工作。 – 2017-05-23 18:57:22

+0

它工作。當我發送一個請求時,我已經有了一個帶有該請求的「connect.sid」,並且通過連接,它有兩個同名的鍵(即「connect.sid」),在cookie解析之後,它使用第一個一。這是爲了在req.cookies中保持正確的值。我通過查看「express-sessions」代碼意識到,爲了使用「express-session」來使用sessionID的正確值,我們必須放置該中間件來編輯實際的req.headers.cookie,只需編輯req Cookie解析器後的cookie不會幫助,因爲它使用req.headers本身。感謝您的解決方案! – 2017-05-23 19:36:30