为什么每个人都使用MongoDB与Node.Js和Express进行用户身份验证

为什么每个人都使用MongoDB与Node.Js和Express进行用户身份验证,node.js,authentication,express,redis,passport.js,Node.js,Authentication,Express,Redis,Passport.js,我发现的几乎所有结合Node.Js/Express.Js和Passport(或其他流行模块)的本地身份验证策略示例都使用MongoDB 我想知道是否有人能回答我这种组合的优点是什么,是否还有其他更轻的数据库可以使用。举个例子,有人用Redis做这类事情吗?或者为什么不直接使用MySQL进行用户管理?虽然使用Redis作为用户数据库本身并没有什么错(是的,它是一个生产数据库,而不仅仅是一个缓存),但这并不意味着这是一个好主意——至少不需要额外的工作 应用程序用于与Redis服务器通信的协议是纯文本

我发现的几乎所有结合Node.Js/Express.Js和Passport(或其他流行模块)的本地身份验证策略示例都使用MongoDB


我想知道是否有人能回答我这种组合的优点是什么,是否还有其他更轻的数据库可以使用。举个例子,有人用Redis做这类事情吗?或者为什么不直接使用MySQL进行用户管理?

虽然使用Redis作为用户数据库本身并没有什么错(是的,它是一个生产数据库,而不仅仅是一个缓存),但这并不意味着这是一个好主意——至少不需要额外的工作

应用程序用于与Redis服务器通信的协议是纯文本、未加密的协议。因此,默认情况下,您将在clear中通过网络发送用户身份验证信息

您可以,也应该,在将用户凭证存储到Redis之前,通过加密用户凭证(包括用户名)来解决这个问题。或者,您需要设置一个stunnel层来对传输进行完全加密(尽管建议您在DB中加密用户密码,无论采用何种解决方案)

这样做是可能的,但很复杂。在我看来,这首先会否定Redis的自然简单性。它还增加了一个故障点——特技设置

这就是说,如果您仍然要追求这样一条路线,那么使用Redis将带来一些好处,例如使用相同的层和基础设施,简单易用的用户指标跟踪、会话存储等。您甚至可以集成Redis的发布/订阅功能,以便在用户尝试登录时触发事件。当然,您可以实现所有这些,并且仍然使用专用的身份验证系统进行用户身份验证,例如LDAP、基于PAM的设置、使用PotsgreSQL和SSL等

至于Redis中的数据结构是什么样子的,在我的脑海里,我会想,每个用户都会有一个哈希表,其中用户名是密钥,密码(当然是加密的),诸如名字、姓氏、电子邮件地址、上次登录时间等项都会是哈希表中的字段。您甚至可以使用
[HINCRBY][1]
在用户哈希中包含登录尝试和失败登录尝试值

如果需要创建组或角色,可以为组或角色定义哈希,然后使用来处理组/角色成员资格


有关在Redis中使用哈希的文档,请参阅。若要在服务器和代理之间设置Redis的特技层,请尝试。

强制性:Redis是一个缓存服务器,从来就不是一个真正的生产数据库。@GeoPhoenix我知道,但它可以工作:)或者您的意思是,一旦我有几十个用户同时使用它,它就会停止工作?@PeeHaa看到了这一点,好东西。你是说每个人都对nosql超级兴奋,这就是为什么?)@deemeetree不,实际上redis在“压力下”会表现得很好,但缓存-数据库服务器之间无法进行比较。