3

我开发了一个使用 node.js 和 socket.io 的网络工具。这是一个单页网站,使用 node.js 从社交媒体网站获取数据并显示在同一页面上。我想为网站添加一个特定于站点的登录系统,但不想使用“ Express ”或“ Passport ”,因为它在不需要时给网站增加了很多过载。

我是 node.js 的新手,想知道是否需要使用 node.js 制作登录系统来维护登录用户的会话?

注意:我需要维护会话来记录用户数据,例如登录时间、搜索查询,并且可能是热图。

提前致谢。如果需要,我可以详细解释问题的特定部分。

4

2 回答 2

2

从长远来看,使用 Express 或 Passport(或至少一些 connect 的中间件)肯定会更容易(如果您的应用程序增长),但如果您想走“手动”路线,这里有一些起点:

  1. Cookie 解析器:您不希望将每个请求的身份验证详细信息作为参数发送,因此您需要将会话详细信息放在 cookie 中。您可以使用 headers手动设置 cookie ,或者使用整齐地包装 API的节点模块。

  2. 会话存储:您可以将所有“登录时间、查询和热图数据”放在 cookie 中,但在每个请求中仅在 cookie 中发送会话 id 并将其他数据服务器端保存在数据库中会更简洁。选项有mongoose、 redis 等。

由于阅读源代码非常有教育意义,因此请阅读 connect 的cookieParsercookieSession。代码不多,API 文档包含实际源代码,因此很容易学习。享受!:)

于 2012-07-30T19:38:43.973 回答
1

从你如何表达这个问题来看,我相信使用 Express 模块(Passport 或类似模块)的开销是你最不担心的;-)

首先,您需要弄清楚要使用哪些机制。

对于身份验证,您将使用用户名/密码组合,还是使用第三方服务,如 Google、Facebook、Twitter 等(“OAuth”之类)?除非您使用某些第三方服务,否则您还需要处理注册(可能还需要验证电子邮件地址等)。即使对于用户名/密码组合,您会自己推出还是使用基于浏览器的“基本身份验证”机制?

身份验证后,您需要一个会话机制来存储一些会话令牌以识别(并验证服务器端)您已通过身份验证。它们通常存储在浏览器 cookie 中,只要您需要,它们就可以轻松地持久化,并通过服务器端数据库中的令牌与每个相关请求进行验证。

最后,您需要一个注销机制和一个“我忘记密码”程序(最初很可能是手动的......)。

如果这一切对您来说相当新,我建议您先尝试使用现成的东西(您自己提到 Passport),然后当您掌握了基础知识后,请随时用您自己的东西替换它。使用 Passport 或 Everyauth 的“好处”是它们涵盖了更多选项,您实际上将能够自己编写,因此一旦您调整系统以使用其中之一,添加 Facebook 登录和类似内容将很多更容易(有人已经为你想出了大部分的东西)。

老实说,在 Node 生态系统中处理此类事情的大多数模块都是在您决定使用的任何解决方案之上的相当薄的包装器,因此开销很可能不会很大,您很可能需要很好地理解无论如何使用它们的问题。在光谱的另一端是现成的系统,如 Drupal 等,一切都可以正常工作,但是就制作自己的系统而言,您有些局限。

在某些用例中,绝对有必要从头开始编写自己的代码,但是没有什么可以阻止您稍后在必要时/如果需要(并且在您在其他人编写的代码的帮助下掌握了基础知识之后)这样做。

祝你好运!

于 2012-07-30T19:39:29.370 回答