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 做啥以及我们为啥需要它?的主要内容,如果未能解决你的问题,请参考以下文章
Navigation Drawer - syncState() 做啥以及为啥应该在 onPostCreate() 中调用它?
为啥除了 passport.js 还要使用 cookie-session?