簡體   English   中英

為什么每個人都使用MongoDB通過Node.Js和Express進行用戶身份驗證

[英]Why everyone uses MongoDB for user authentication with Node.Js and Express

我發現結合Node.Js / Express.Js和Passport(或其他流行模塊)的本地身份驗證策略的每個示例都使用MongoDB。

我想知道是否有人可以回答我這種組合的優點是什么,以及是否還有其他更輕便的數據庫可供使用。 例如,有人將Redis用於此類事情嗎? 還是為什么不只使用MySQL進行用戶管理?

盡管將Redis用作用戶數據庫本身沒有什么問題(是的,它是生產數據庫,而不是“只是一個緩存”),但這並不意味着它是一個好主意-至少不是沒有額外的工作。

您的應用將用於與Redis服務器通信的協議是純文本,未加密的協議。 因此,默認情況下,您將通過有線方式發送用戶身份驗證信息。

您可以並且應該通過加密用戶憑據(包括用戶名)來解決此問題,然后再將其存儲在Redis中。 或者,您將需要設置一個隧道層來完全加密傳輸(盡管無論如何解決,仍然建議您在數據庫中加密用戶密碼)。

這樣做是可能的,但是很復雜。 我認為這首先會否定Redis的自然簡單性。 它還增加了一個故障點-隧道設置。

就是說,如果您仍然選擇這樣的路線,那么使用Redis會帶來一些好處,例如使用相同的層和基礎結構,簡單易用的用戶指標跟蹤,會話存儲等。 您甚至可以集成Redis的發布/訂閱功能,以在用戶登錄嘗試時觸發事件。 當然,您可以實現所有這些功能,並且仍然使用專用的身份驗證系統來進行用戶身份驗證,例如LDAP,基於PAM的設置,使用帶SSL的PotsgreSQL等。

至於Redis中的數據結構是什么樣子,我想不到的是每個用戶的哈希值,其中用戶名是密鑰,密碼(當然是加密的),諸如給定名稱的項目,姓氏,電子郵件地址,上次登錄時間等,每個都是哈希中的字段。 您甚至可以使用[HINCRBY][1]在用戶哈希中包含登錄嘗試和失敗的登錄嘗試值。

如果需要創建組或角色,則可以為該組或角色定義一個哈希,然后使用一個集合來處理組/角色成員身份。

有關在Redis中使用哈希的文檔,請參見Redis哈希文檔 要在服務器和代理之間使用隧道層設置Redis,請嘗試本教程

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM