Everyauth vs Passport.js?

Everyauth and Passport.js seem to have very similar feature sets. What are some of the positive and negative comparisons between the two that would make me want to use one over the other?

42702 次浏览

我先试了 Everyauth,然后去了 Passport。我觉得这样比较灵活,尤指。如果(例如)我需要不同的供应商不同的逻辑。它还使得配置自定义身份验证策略变得更加容易(imo)。另一方面,如果视图助手对您来说很重要,那么它就没有视图助手。

护照

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

每个人

  • 发展历史悠久,成熟。
  • 不再维护
  • 很棒的医生
  • 服务范围广泛

作为 护照的开发者,我只是附和一下我的意见。

Before developing Passport, I evaluated everyauth and determined that it didn't meet my requirements. So, I set about implementing a different solution which would. The major points I wanted to address are:

习语 Node.js

everyauth makes extensive use of promises, instead of Node's approach of using callbacks and closures. Promises are an alternative approach to async programming. While useful in some high-level situations, I wasn't comfortable with an authentication library forcing this choice upon my application.

此外,我发现正确使用回调和闭包可以产生简洁、结构良好(几乎是函数式样)的代码。Node 本身的大部分力量来自于这个事实,而 Passport 也紧随其后。

模块化

Passport 采用策略设计模式,在核心模块和各种认证机制之间定义明确的关注点分离。这样做有很多好处,包括更小的总体代码大小和定义良好的、可测试的接口。

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

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

灵活

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

这意味着在定义路由的位置和使用身份验证的时间时,存在 没有惊喜。也没有对特定框架的依赖关系。人们正在成功地将 Passport 与其他框架(如 熨斗)一起使用

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

Passport 也会以一种完全传统的方式出错,仅次于 Express 定义的 错误处理中间件。

相比之下,每个 auth 都有自己的约定,这些约定不能很好地适应问题空间,从而导致了长期存在的开放问题,如 36英镑

API 认证

任何身份验证库的最高成就是它能够像基于 Web 的登录那样优雅地处理 API 身份验证。

I won't elaborate much on this point. However, I encourage people to look into Passport's sibling projects, OAuthorize and 授权. Using these projects, you can implement "full-stack" authentication, for both HTML/session-based web apps and API clients.

可靠

Finally, authentication is a critical component of an application, and one you want to be fully comfortable relying on. everyauth has a long list of 问题 many of which remain open and resurface over time. In my opinion, this is due to low unit test coverage, which itself suggests that the internal interfaces in everyauth are not suitably defined.

相比之下,Passport 的接口及其策略定义良好,并被单元测试广泛覆盖。针对 Passport 提交的 问题大多是次要的特性请求,而不是与身份验证相关的 bug。

Despite being a younger project, this level of quality suggests a more mature solution that is easier to maintain and trust going forward.

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

In my experience, Everyauth didn't work out of the box with it's password login style. I am using express3 and I declare my middleware like so app.use(everyauth.middleware(app)); and it still wasn't passing in the everyauth local to my template. The last git commit was a year ago and I figure new packages have broken everyauth. Now I'm going to try passport.

I used to use Everyauth more specifically mongoose-auth. I found it hard to split up my files properly without dismantling the everyauth module. Passport in my opinion is a cleaner method for creating logins. There is a write up that I found very helpful http://rckbt.me/2012/03/transitioning-from-mongoose-auth-to-passport/

刚刚完成从每个人到护照的更换。原因如下。

  1. 一切都不够稳定。压垮我的最后一根稻草是上周我被一个神秘的问题咬了一口: facebook 认证可以在 local.host 和生产环境中工作,但是在我的 heroku 测试环境中不行,即使有相同的代码和数据库以及一个新的 heroku 应用实例。在那个时候,关于如何隔离这个问题,我已经没有什么理论了,因此删除所有的 auth 是合乎逻辑的下一步。
  2. 它使用用户名/密码凭证提供标准认证支持的方式不容易与单页 Web 应用程序方法集成。
  3. I was unable to get everyauth to work with Google accounts.
  4. 每个人的积极发展似乎都在衰落。

港口是令人惊讶的无痛,只需要几个小时,包括手动测试。

所以很明显,我建议你去申请护照。

这个回答有点晚了,但是我发现了这个帖子,(在听到了关于 Everyauth 的所有负面反馈之后)决定使用 Passport... 然后我讨厌它。它是不透明的,只能作为中间件使用(例如,您无法从 GraphQL 端点进行身份验证) ,并且我遇到了不止一个难以调试的 bug (例如。我如何有两个快速会话?).

所以我去找,发现了 https://github.com/jed/authom。对于我的需要,这是一个更好的图书馆!它的级别比其他两个库稍低一些,所以您必须自己将用户放入会话中... ... 但这只是一行,所以这真的没什么大不了的。

More importantly its design gives you a lot more control, making it easy to implement your authorization the way you want and not the way Passport intended. Plus, compared to Passport it's a lot simpler and easier to learn.