Node.js Everyauth vs Passport.js?

Node.js Everyauth vs Passport.js?,node.js,connect,everyauth,passport.js,Node.js,Connect,Everyauth,Passport.js,而且似乎有非常相似的功能集。这两者之间有哪些积极和消极的比较会让我想使用其中一个而不是另一个?我先试用了每一种护照,后来又去了Passport。它给我的印象是更灵活一些,特别是(例如)如果我需要为不同的提供者提供不同的逻辑。它还使配置自定义身份验证策略变得更容易(imo)。另一方面,如果视图帮助程序对您很重要,则它没有这些帮助程序。Passport 模块化和透明 好医生 社区贡献(由于其模块化) 与每个人和他们的狗一起工作(同样,因为它是模块化的) 埃维雅思 发展历史悠久,成熟 不再维持

而且似乎有非常相似的功能集。这两者之间有哪些积极和消极的比较会让我想使用其中一个而不是另一个?

我先试用了每一种护照,后来又去了Passport。它给我的印象是更灵活一些,特别是(例如)如果我需要为不同的提供者提供不同的逻辑。它还使配置自定义身份验证策略变得更容易(imo)。另一方面,如果视图帮助程序对您很重要,则它没有这些帮助程序。

Passport
  • 模块化和透明
  • 好医生
  • 社区贡献(由于其模块化)
  • 与每个人和他们的狗一起工作(同样,因为它是模块化的)
埃维雅思
  • 发展历史悠久,成熟
  • 不再维持
  • 伟大的医生
  • 服务范围广泛

我作为一家公司的开发商,用我的两分钱打电话进来

在开发Passport之前,我对everyauth进行了评估,确定它不符合我的要求。因此,我开始实施一个不同的解决方案,它将。我想谈的要点是:

惯用节点.js

everyauth广泛使用承诺,而不是Node使用回调和闭包的方法。承诺是异步编程的另一种方法。虽然在某些高级情况下很有用,但我不习惯在应用程序上强制使用身份验证库

此外,我发现正确使用回调和闭包可以生成简洁、结构良好(几乎是函数式)的代码。节点本身的大部分功能都来自这一事实,Passport也同样如此

模块化

Passport采用一种策略设计模式来定义核心模块和各种身份验证机制之间的清晰分离。这有许多好处,包括较小的总体代码大小和定义良好且可测试的接口

有关基本说明,请比较运行
$npm install passport
$npm install everyauth
之间的差异。Passport允许您仅使用实际需要的依赖项来设计应用程序

这种模块化体系结构已被证明具有适应性,促进了社区实现了对各种身份验证机制的支持,包括OpenID、OAuth、BrowserID、SAML等

灵活的

Passport只是一个中间件,使用Connect和Express建立的
fn(req,res,next)
约定

这意味着在定义路由的位置和使用身份验证的时间时,不会有任何意外。也不依赖于特定的框架。人们正在成功地将Passport与其他框架一起使用,例如

相反,everyauth中的任何模块都可以将路由插入到应用程序中。这会使调试变得困难,因为路由将如何调度并不明显,并且会导致与特定框架的紧密耦合

Passport还以一种完全传统的方式出现错误,仅次于Express定义的中间件

相反,everyauth有自己的约定,这些约定不适合问题空间,导致长期存在的开放问题,例如

API认证

任何身份验证库的最大成就是它能够像基于web的登录一样优雅地处理API身份验证

关于这一点,我不会详细阐述。然而,我鼓励人们研究Passport的兄弟项目,以及。使用这些项目,您可以为基于HTML/会话的web应用程序和API客户端实现“完整堆栈”身份验证

可靠的

最后,身份验证是应用程序的关键组件,也是您希望完全放心依赖的组件。everyauth有一个很长的列表,其中许多仍然开放,并随着时间的推移重新出现。在我看来,这是由于单元测试覆盖率低,这本身就表明everyauth中的内部接口没有适当定义

相比之下,Passport的接口及其策略定义良好,并被单元测试广泛覆盖。针对Passport的归档往往是次要的功能请求,而不是与身份验证相关的bug


尽管是一个较年轻的项目,但这一级别的质量意味着一个更成熟的解决方案,更易于维护和信任。

注意这篇文章的日期,它将表明这篇文章的相关性


根据我的经验,Everyauth的密码登录方式并不是开箱即用的。我使用的是express3,我声明了我的中间件,比如so
app.use(everyauth.middleware(app))并且它仍然没有将everyauth本地传递到我的模板。上一次git提交是一年前,我认为新的包已经破坏了everyauth。现在我想试试护照

我以前使用Everyauth,更具体地说是mongoose auth。我发现在不拆除everyauth模块的情况下很难正确分割文件。在我看来,Passport是创建登录名的一种更干净的方法。我发现有一篇文章很有帮助

刚刚从everyauth改成passport。原因如下

  • 每个人都不够稳定。最后一根稻草是上周我被一个神秘的问题缠住了,facebook身份验证将在local.host和生产环境中工作,但在我的heroku测试环境中不工作,即使有相同的代码和数据库以及一个新的heroku应用实例。在那一点上,关于如何隔离这个问题,我已经没有理论了,因此,删除everyauth是合乎逻辑的下一步
  • 它支持使用用户名/密码凭据进行标准身份验证的方式不容易与单页web应用方法集成
  • 我无法让每个人都使用谷歌账户
  • 积极发展每一项工作