【问题标题】:How to make a proper and simple authentification for nodejs website?如何对 node js 网站进行正确且简单的身份验证?
【发布时间】:2017-08-02 23:36:08
【问题描述】:

我正在学习使用 nodejsn、express、socket.io 和 mongodb 制作网站。我几乎是自学成才的,但在身份验证方面,我找不到简单说明其工作原理的教程。

我有一个登录表单,一个注册表单,用户数据在注册时存储到数据库中。当我登录时,页面会用我的用户名向我打招呼,但是当我刷新或关闭选项卡并返回时,我必须再次登录。
我想要的只是让用户无需系统登录即可返回。

我能找到的只是这样的解释:http://mherman.org/blog/2015/01/31/local-authentication-with-passport-and-express-4
而且我真的不明白。

有人能解释一下我在这里缺少什么吗?

【问题讨论】:

  • 您需要显示一些代码,但我会假设您没有进行任何类型的会话管理,或者如果您是通过 http 提供服务但具有 secure:true 选项,这需要 https。
  • 听起来像cookies 是您正在寻找的。使用加密模块创建一个强大的随机 cookie,即 require('crypto').randomBytes 并在 req 上检查该 cookie。如果用户拥有该 cookie,则将其视为“已登录”。
  • 感谢您的回复。是的,我还没有做任何类型的会话管理。我很难找到一些解释它是如何工作的链接。 Jekrb 说的话听起来很棒。寻找 cookie 我发现:stackoverflow.com/questions/16209145/… 非常感谢!

标签: node.js mongodb authentication express socket.io


【解决方案1】:

会话管理是 Jekrb 强调的内容,在突出显示匿名用户或应用程序用户时也是一个很好的问题。

尽管在深入探讨之前,我要强调的是,如果您的应用程序要在这种情况下大规模运行,cookie 会有一个小问题:“如果您有 N 个服务器,其中 N > 1,会发生什么? ?”因此,在某种程度上,如果您不确定您的用户群,cookie 可能不是正确的方法。

我假设您没有此问题,因此提供 cookie 作为识别用户的一种方式是合适的,但不是唯一可用的方法。

本文概述了行业解决此问题的几种方法:

https://www.kompyte.com/5-ways-to-identify-your-users-without-using-cookies/

我最喜欢的方法是使用 https://github.com/Valve/fingerprintjs2 进行画布指纹识别,这将创建一个哈希,您可以存储并使用它来验证新连接,可能使用您列出的 socket.io 之类的东西。这样做的一个主要优点是可扩展性,因为我们可以将这些唯一的哈希集中存储在数据库内部,而不必担心总是被一台服务器卡住。

最后,我没有提交任何我不喜欢的代码,但主题很难确定具体细节,尽管我希望提供一些替代 cookie 的方法。

【讨论】:

  • 非常感谢您提供此类提示。因此,使用指纹JS,我什至可以一键创建匿名帐户。 (我不需要用户名/电子邮件/等...)
  • 你可以,虽然它是每个浏览器签名,所以如果他们在使用 Firefox 之后打开 chrome,很可能会生成一个单独的哈希。
  • 我想在用户架构中添加一些“密钥”,并提供一个使用该密钥个性化的唯一 URL,以便每个用户都可以直接访问他的帐户。
猜你喜欢
  • 2017-09-04
  • 2019-06-03
  • 1970-01-01
  • 2017-04-03
  • 1970-01-01
  • 2015-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多