Everyauth vs Passport.js?


Pasaporte de Everyauth y .js parece tener conjuntos de características muy similares. ¿Cuáles son algunas de las comparaciones positivas y negativas entre los dos que me harían querer usar uno sobre el otro?

Author: Martijn Pieters, 2012-08-15

7 answers

Hablando con mis dos centavos, como el desarrollador de Passport.

Antes de desarrollar Passport, evalué everyauth y determiné que no cumplía con mis requisitos. Por lo tanto, me puse a implementar una solución diferente que sería. Los principales puntos que quería abordar son:

Nodo Idiomático.js

Everyauth hace un uso extensivo de promises, en lugar del enfoque de Node de usar callbacks y closures. Las promesas son un enfoque alternativo a la async programación. Si bien es útil en algunas situaciones de alto nivel, no me sentía cómodo con una biblioteca de autenticación que obligara a esta elección en mi aplicación.

Además, encuentro que el uso adecuado de callbacks y cierres produce código conciso, bien diseñado (estilo casi funcional). Gran parte del poder de Node en sí proviene de este hecho, y Passport sigue su ejemplo.

Modular

Passport emplea un patrón de diseño de estrategia para definir una clara separación de preocupaciones entre el módulo core y varios mecanismos de autenticación. Esto tiene una serie de beneficios, incluyendo un tamaño de código general más pequeño e interfaces bien definidas y comprobables.

Para una ilustración básica, compare la diferencia entre ejecutar $ npm install passport y $ npm install everyauth. Passport le permite crear su aplicación utilizando solo las dependencias que realmente necesita.

Esta arquitectura modular ha demostrado ser adaptable, facilitando una comunidad que ha implementado soporte para una amplia variedad de mecanismos de autenticación, incluyendo OpenID, OAuth, BrowserID, SAML, etc.

Flexible

Passport es solo middleware, utilizando la convención fn(req, res, next) establecida por Connect and Express.

Esto significa que no hay sorpresas, ya que define dónde desea que sus rutas y cuándo desea usar la autenticación. Tampoco hay dependencias en un marco específico. Las personas están utilizando con éxito Passport con otros marcos como Flatiron

Por el contrario, cualquier módulo en everyauth puede insertar rutas en su aplicación. Esto puede dificultar la depuración, ya que no es obvio cómo se enviará una ruta y conduce a un acoplamiento estrecho con un marco específico.

Passport también produce errores de una manera totalmente convencional, al lado de middleware de manejo de errores como lo define Express.

En contraste, everyauth tiene sus propias convenciones, que no se ajustan bien al espacio problemático, causing long-standing open issues such as #36

Autenticación API

El mayor logro de cualquier biblioteca de autenticación es su capacidad para manejar la autenticación API tan elegantemente como el inicio de sesión basado en web.

No voy a elaborar mucho sobre este punto. Sin embargo, animo a la gente a buscar en los proyectos hermanos de Passport, OAuthorize y OAuth2orize. Usando estos proyectos, puede implementar la autenticación "full-stack", para ambos HTML / aplicaciones web basadas en sesiones y clientes API.

Fiable

Finalmente, la autenticación es un componente crítico de una aplicación, y uno en el que desea estar completamente cómodo. everyauth tiene una larga lista de problemas muchos de los cuales permanecen abiertos y reaparecen con el tiempo. En mi opinión, esto se debe a la baja cobertura de pruebas unitarias, que a su vez sugiere que las interfaces internas en everyauth no están adecuadamente definidas.

En contraste, las interfaces de Passport y sus estrategias están bien definidas y ampliamente cubiertas por pruebas unitarias. Los problemas presentados contra Passport tienden a ser principalmente solicitudes de características menores, en lugar de errores relacionados con la autenticación.

A pesar de ser un proyecto más joven, este nivel de calidad sugiere una solución más madura que es más fácil de mantener y confiar en el futuro.

 188
Author: Jared Hanson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-15 23:01:38

Pasaporte

  • modular y transparente
  • buenos documentos
  • contribuciones de la comunidad (debido a su modularidad)
  • funciona con todos y su perro (de nuevo, debido a su modularidad)

Everyauth

  • larga historia de desarrollo, madura.
  • ya no se mantiene
  • grandes documentos
  • funciona con una amplia gama de servicios
 18
Author: Waylon Flinn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-07 02:27:09

Acabo de cambiar de everyauth a passport. Las razones fueron las siguientes.

  1. Everyauth no es lo suficientemente estable. La gota que colmó el vaso fue la semana pasada me mordió un misterioso problema donde la autenticación de Facebook funcionaría en local.host y en el entorno de producción, pero no en mi entorno de prueba en heroku, incluso con código y bases de datos idénticos y una nueva instancia de la aplicación heroku. En ese momento me quedé sin teorías sobre cómo aislar el problema, por lo que la eliminación de everyauth era el siguiente paso lógico.
  2. La forma en que proporciona soporte para la autenticación estándar utilizando credenciales de nombre de usuario/contraseña no se integra fácilmente con un enfoque de aplicación web de una sola página.
  3. No pude hacer que everyauth trabajara con cuentas de Google.
  4. El desarrollo activo de everyauth parece estar en declive.

El puerto fue sorprendentemente indoloro, solo tomó unas pocas horas, incluidas las pruebas manuales.

Así que obviamente, recomiendo ir por pasaporte.

 16
Author: Gudlaugur Egilsson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-26 22:49:14

Probé Everyauth primero y desde entonces he ido a Passport. Me pareció algo más flexible, esp. si (por ejemplo) necesito una lógica diferente para diferentes proveedores. También facilita (imo) la configuración de estrategias de autenticación personalizadas. Por otro lado, no tiene los ayudantes de vista, si son importantes para usted.

 4
Author: Paul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-15 19:40:14

Solía usar Everyauth más específicamente mangosta-auth. Me resultó difícil dividir mis archivos correctamente sin desmantelar el módulo everyauth. Passport en mi opinión es un método más limpio para crear inicios de sesión. Hay un escrito que me pareció muy útil http://rckbt.me/2012/03/transitioning-from-mongoose-auth-to-passport /

 2
Author: user1441287,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-16 14:37:19

Tenga en cuenta la fecha de este post, indicará lo relevante que es este post.

En mi experiencia, Everyauth no funcionó fuera de la caja con su estilo de inicio de sesión de contraseña. Estoy usando express3 y declaro mi middleware así app.use(everyauth.middleware(app)); y todavía no estaba pasando el local everyauth a mi plantilla. La última confirmación de git fue hace un año y me imagino que nuevos paquetes han roto everyauth. Ahora voy a intentar pasaporte.

 1
Author: Harsh Singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-06 19:55:58

Esto responde un poco tarde, pero encontré este hilo y (después de escuchar todos los comentarios negativos sobre Everyauth) decidí usar Passport ... y luego lo odiaba. Era opaco, solo funcionaba como middleware (no se podía autenticar desde un punto final de GraphQL, por ejemplo), y me encontré con más de un error difícil de depurar (por ejemplo. ¿Cómo tengo dos sesiones Express?).

Así que fui a buscar y encontré https://github.com/jed/authom. Para mis necesidades esta es una biblioteca mucho mejor! Es un poco más bajo que las otras dos bibliotecas, por lo que tienes que hacer cosas como poner al usuario en la sesión tú mismo ... pero eso es sólo una línea, así que no es gran cosa.

Lo más importante es que su diseño le da mucho más control, lo que facilita la implementación de su autorización de la manera que desea y no de la manera en que Pasaporte pretendía. Además, en comparación con Passport, es mucho más simple y fácil de aprender.

 1
Author: machineghost,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-14 02:21:50