passport.js 做啥以及我们为啥需要它?

Posted

技术标签:

【中文标题】passport.js 做啥以及我们为啥需要它?【英文标题】:What does passport.js do and why we need it?passport.js 做什么以及我们为什么需要它? 【发布时间】:2018-01-07 17:55:54 【问题描述】:

我不熟悉 Node.js 中的用户身份验证,现在我正在尝试创建一个带有登录系统的网站。我已经设法使用网站上的代码 sn-ps 使其工作,但我真的不明白为什么我们需要 passport.js 作为中间件来进行身份验证。

注册:

我们以passport-local为例,我们在使用passport中间件的时候,基本上是想在数据库中新建一个文档,那我们可以不用passport就行,比如直接使用MongoClient,具有重复检查,并在加密后存储密码。

登录:

我们可以简单地根据我们的数据库检查用户的电子邮件或用户名,然后在电子邮件或用户名匹配后检查密码。这也可以在没有护照的情况下完成。确认用户身份后,我们可以使用express-session 将会话存储在 cookie 中以实现登录持久性。

可以在here找到有关我上述过程的视频。

我知道肯定有一些非常重要的功能我忽略了,但是在浏览了很多网络资源后,包括 ***、youtube、passport.js 的文档等等,我仍然不明白 passport.js 是做什么的和为什么我们需要它。

如果问题看起来很愚蠢,请提前道歉。

【问题讨论】:

我猜这将属于“没有人再编写自己的代码”和“一切都由别人的库和框架完成”的类别。或者可能,“没有人知道如何编码了”,但对于可能有事实基础的固执己见的评论,我深表歉意。 我们不需要任何东西。是的,您可以自己轻松完成所有这些操作。是的,我们不需要使用库。但显然有些人发现 passport.js 有用,他们不必自己做更少的事情,而不是重新发明***,同时很好地融入中间件抽象。 通常存在这样看似毫无意义的库只是因为它更容易。以js-cookie 为例;无论如何,这都不是必要的。也很容易找到自己处理 cookie 的信息。但是以别人的工作为基础要容易得多。为什么要重新发明***? 【参考方案1】:

Passport 是 express.js 的中间件。它支持各种登录类型,Basic、Token、Local(用户名、密码)、OAuth、OAuth2 等。我们可以将这些结合起来,让用户通过使用 Google、FB 或任何代码量非常少的服务登录来进行身份验证。我们还可以使用它来组合外部身份验证服务,以便用户可以选择使用所选策略之一登录,例如谷歌,推特。使用护照进行身份验证比自己从头开始构建要快得多。这就是我们使用护照的原因。你不需要护照,它只是让开发更快。从他们的网站了解更多信息 => https://www.passportjs.org/

【讨论】:

【参考方案2】:

对我来说这是不必要的。

这并没有为我节省任何工作。我必须编写配置、回调和用户模式。对我来说,为此编写一个中间件对我来说更容易。

而且我没有看到任何安全强制措施,因为我正在编写自己的验证回调。

所以,我看不出有什么理由应该使用它。

【讨论】:

如果你只是使用本地策略,是的,没有意义。但是,当您需要通过 google、fb、twitter、local 以及可能的其他一些站点登录来进行身份验证时,它最终会成为为之前已完成多次的任务编写的大量代码。这就是护照的用途。

以上是关于passport.js 做啥以及我们为啥需要它?的主要内容,如果未能解决你的问题,请参考以下文章

GLEW 做啥,我为啥需要它?

Navigation Drawer - syncState() 做啥以及为啥应该在 onPostCreate() 中调用它?

为啥除了 passport.js 还要使用 cookie-session?

Okta 是不是使用 Passport.js?

为啥 Magento 在产品保存时使整页缓存失效实际上使页面未缓存以及由于未缓存而刷新会做啥

FormControl 是做啥用的?为啥使用它?应该如何使用?