Everyauth vs Passport.js?

Everyauth和Passport.js似乎有非常相似的function集。 两者之间的一些正面和负面的比较是什么使我想要使用一个比另一个呢?

作为护照的开发者,用我的两分钱来敲门 。

在开发护照之前,我评估了每一个人,并确定它不符合我的要求。 所以,我着手实施一个不同的解决scheme。 我想要解决的主要问题是:

地道的Node.js

Everyauth广泛使用promise,而不是Node使用callback和封闭的方法。 承诺是asynchronous编程的另一种方法。 虽然在某些高级别的情况下很有用,但我并不习惯使用身份validation库来强制select我的应用程序。

此外,我发现正确使用callback函数和闭包函数可以产生简洁,结构良好的(几乎实用的风格)代码。 Node的大部分function都来自于这个事实,Passport也是如此。

模块化

护照采用策略devise模式来定义核心模块和各种authentication机制之间明确的关注点。 这具有许多好处,包括较小的总体代码大小以及定义明确和可testing的接口。

对于基本的例子,比较运行$ npm install passport$ npm install everyauth 。 Passport允许您仅使用实际需要的依赖关系来创build应用程序。

这种模块化的体系结构已经certificate了自己的适应性,促进了社区实现了对各种authentication机制的支持,包括OpenID,OAuth,BrowserID,SAML等。

灵活

Passport 只是中间件 ,使用Connect和Expressbuild立的fn(req, res, next)约定。

这意味着没有什么惊喜 ,因为您定义了您想要的路线以及何时使用身份validation。 对特定的框架也没有依赖性。 人们成功地使用护照与其他框架,如熨斗

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

护照也是一种完全传统的方式,接下来是由Express定义的error handling中间件。

相比之下,每个人都有自己的习惯,不符合问题的空间,导致长期的开放性问题,如#36

APIauthentication

任何authentication库的最大成就是它能够像基于web的login一样优雅地处理APIauthentication。

关于这一点,我不会详细说明。 不过,我鼓励大家看看护照的兄弟项目, OA授权和OAuth2orize 。 使用这些项目,您可以为基于HTML /会话的Web应用程序和API客户端实现“全栈”身份validation。

可靠

最后,身份validation是应用程序的重要组成部分,您希望完全依赖于此身份validation。 每个人都有很多问题 ,其中许多问题仍然存在,并随着时间的推移而重新出现。 在我看来,这是由于低单位testing覆盖率,这本身表明everyauth的内部接口没有适当的定义。

相比之下,Passport的接口和策略是明确定义的,并且被unit testing覆盖。 针对Passport提交的问题通常是次要function请求,而不是与身份validation有关的错误。

尽pipe是一个年轻的项目,这个质量水平表明一个更成熟的解决scheme,更容易维护和信任未来。

Everyauth

  • 更长的发展历史,成熟。
  • 伟大的文档
  • 积极维护
  • 与广泛的服务工作

护照

  • 模块化和透明
  • 好文档
  • 社区贡献(由于它的模块化)
  • 与每个人和他们的狗(再次,由于它的模块化)

刚刚完成从everyauth改为护照。 原因如下。

  1. Everyauth不够稳定。 上个礼拜,我被一个神秘的问题困扰了,Facebookauthentication可以在local.host和生产环境中使用,但是在我的testing环境下,即使使用相同的代码和数据库以及一个新的heroku应用程序实例, 在那个时候,我没有理清如何隔离这个问题,所以删除everyauth是合乎逻辑的下一步。
  2. 它提供对使用用户名/密码凭据的标准authentication支持的方式不容易与单个页面的Web应用程序方法集成。
  3. 我无法使用Everyauth来使用Google帐户。
  4. Everyauth的积极发展似乎在下降。

港口令人惊讶地无痛,只需要几个小时,包括手动testing。

所以显然,我build议去护照。

我先尝试了Everyauth,然后去了护照。 这让我感到更加灵活一些,尤其是。 如果(例如)我需要不同的提供者不同的逻辑。 这也使得configuration自定义身份validation策略变得更容易(imo)。 另一方面,如果这些对你来说很重要的话,它就没有看法的帮助者。

我曾经使用Everyauth更具体的mongooseauthentication。 我发现很难分裂我的文件,而不拆除everyauth模块。 我认为护照是创buildlogin的一种更简洁的方法。 有一个写我觉得很有帮助http://rckbt.me/2012/03/transitioning-from-mongoose-auth-to-passport/

请注意这篇文章的date,它会显示这篇文章的相关性。

根据我的经验,Everyauth并没有使用密码login方式。 我正在使用express3,我声明我的中间件就像app.use(everyauth.middleware(app)); 而且还没有传到本地的模板。 最后一个git提交是一年前,我认为新的软件包已经打破everyauth。 现在我要去尝试护照。