- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
Everyauth和 Passport.js似乎有非常相似的功能集。两者之间有哪些正面和负面的比较让我想使用其中的一个?
最佳答案
作为 Passport 的开发者,我的两分钱值得一提。 .
在开发 Passport 之前,我评估了everyauth 并确定它不符合我的要求。所以,我着手实现一个不同的解决方案。我想强调的主要观点是:
惯用的 Node.js
everyauth 广泛使用 Promise,而不是 Node 使用回调和闭包的方法。 Promise 是异步编程的另一种方法。虽然在某些高级情况下很有用,但我不喜欢身份验证库将这种选择强加于我的应用程序。
此外,我发现正确使用回调和闭包会产生简洁、架构良好(几乎是函数式风格)的代码。 Node 本身的大部分力量都来自这一事实,Passport 也效仿。
模块化
Passport 采用一种策略设计模式来定义核心模块和各种身份验证机制之间的关注点的清晰分离。这有很多好处,包括更小的整体代码大小以及定义良好且可测试的接口(interface)。
作为基本说明,比较运行 $ npm install passport
和 $ npm install everyauth
之间的区别。 Passport 允许您仅使用您实际需要的依赖项来制作您的应用程序。
这种模块化架构已证明自己具有适应性,有助于实现对各种身份验证机制(包括 OpenID、OAuth、BrowserID、SAML 等)的支持的社区。
灵活
Passport 只是中间件,使用 Connect 和 Express 建立的 fn(req, res, next)
约定。
这意味着没有意外,因为您可以定义您想要路由的位置以及何时要使用身份验证。也不依赖于特定的框架。人们成功地将 Passport 与其他框架一起使用,例如 Flatiron
相比之下,everyauth 中的任何模块都可以将路由插入到您的应用程序中。这可能会使调试变得困难,因为如何调度路由并导致与特定框架的紧密耦合并不明显。
Passport 也以一种完全传统的方式出错,接下来是 error-handling Express 定义的中间件。
相比之下,everyauth 都有自己的约定,不能很好地适应问题空间,从而导致长期存在的开放问题,例如 #36
API 认证
任何身份验证库的最高成就是它能够像处理基于 Web 的登录一样优雅地处理 API 身份验证。
我不会详细说明这一点。但是,我鼓励人们研究 Passport 的兄弟项目,OAuthorize和 OAuth2orize .使用这些项目,您可以为基于 HTML/ session 的 Web 应用程序和 API 客户端实现“全栈”身份验证。
可靠
最后,身份验证是应用程序的关键组件,您希望完全放心地依赖它。 everyauth 有一长串 issues其中许多仍然开放并随着时间的推移重新浮出水面。在我看来,这是由于单元测试覆盖率低,这本身表明everyauth 中的内部接口(interface)没有适当定义。
相比之下,Passport 的接口(interface)及其策略定义良好,并且被单元测试广泛覆盖。 Issues针对 Passport 提出的申请大多是次要功能请求,而不是与身份验证相关的错误。
尽管是一个年轻的项目,但这种质量水平表明更成熟的解决方案更容易维护和信任。
关于node.js - Everyauth vs Passport.js?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11974947/
我用运行 Node node --debug app OR node --debug-brk app 它有反应 debugger listening on port 5858 Express serv
这个问题在这里已经有了答案: What is the difference between (int *i) and (int* i) in context of both C and C++? [
我有一个应用程序,它通过消息队列将数据库写入命令分派(dispatch)给工作人员(数量非常大),因此无法保证它们的接收顺序。 我有两个 Node ,例如“Account”和“Media”。在此假设的
有没有办法在调用 ts-node 时将选项传递给 Node ?我正在尝试在 Node 中使用一个实验性功能,如果它能与 ts-node 一起使用,那就太好了。 这就是我目前正在做的事情: ts-nod
我有一个容器化的Node应用程序,它在DigitalOcean服务器上运行。当我更新服务器上的应用程序时,该应用程序必须关闭一小段时间。为了能够更新应用程序并避免停机,我目前正在阅读零停机时间部署/蓝
我正在编写一个 Node.js 应用程序。我正在使用 request 和 Cheerio 加载一组 URL 并获取该网站的大量信息,现在假设我想要获取的只是标题: var urls = {"url_1
如果不弹出以下错误,我无法安装任何 Node.js 模块。错误代码引用package.json文件。如果知道为什么会发生这种情况,我们将不胜感激。 最佳答案 这些不是错误,它们只是警告。一切都应该如此
如果我运行(从我的项目目录中): supervisor javascripts/index.js 我得到:/usr/bin/env: Node :没有这样的文件或目录 如果我运行: node java
我已遵循使用 Node-Inspector 的所有步骤 但是当我打开应用程序时,我在控制台上看不到任何脚本或日志。 我的应用程序在端口 4000 上运行。我认为唯一可能发生冲突的是端口 8080 上的
我在android中使用rxjava2,有时会遇到这样的问题: Observable.fromArray( // maybe a list about photo url in SD
我目前正在使用 Node 光纤来编写同步服务器端代码。我主要通过 try-catch block 进行错误处理,但外部库或其他小部分异步代码中总是有可能发生错误。我正在考虑使用新的域功能来尝试将这些错
看起来node-debug是node-inspector周围的一个shell?分别什么时候应该使用? 最佳答案 如果您安装node-debug,您只能访问node-debug命令。 如果您安装node
我目前正在代理后面工作,该代理不允许我执行此命令的 HTTP GET 请求阶段: Node node-sass/scripts/build.js 请求阶段: gyp http GET https://
听说node js可以用在服务端。我以前用过jsp。 jsp页面内部的java代码对客户端是不可见的。如果 Node js 只是 javascript,那么它如何对客户端不可见? 最佳答案 首先,No
我正在为 Node native 插件从 node-waf 构建迁移到 node-gyp 构建系统。 node-gyp 说它支持多个目标版本,但我在使用 node-gyp 时找不到如何指定目标 Nod
给定一个 $node ,我正在尝试在以下两种输出该 $node 的方式之间做出决定。 要么 $output = theme('node', $node); 或 node_build_content($
如果package.json中的窗口A打开一个新窗口B,node-main如何访问它?这是我的代码: package.json { "main": "index.html",
我试图在我的 xml 中的特定节点 ( ) 之前插入一个注释节点。这是它的方法: function test(xmlResponse) { var parser = new DOMParse
我正在尝试做npm install wrtc使用 Node 版本 16.14.0 但这还没有完成。它在给npm error code 1所以我试图将 Node 版本更改为以前的 lts 14.19.0
当我在 Visual Studio 中运行 Node.js 应用程序时,我收到以下消息:DeprecationWarning: 'node --debug' 和 'node --debug-brk'
我是一名优秀的程序员,十分优秀!