webentwicklung-frage-antwort-db.com.de

Everyauth vs Passport.js?

Everyauth und Passport.js scheinen sehr ähnliche Funktionen zu haben. Was sind einige der positiven und negativen Vergleiche zwischen den beiden, die mich dazu bringen würden, einen über den anderen zu verwenden?

120
EhevuTov

Ich stimme meinen zwei Cent zu, als Entwickler von Passport .

Vor der Entwicklung von Passport habe ich jeden einzelnen überprüft und festgestellt, dass er nicht meinen Anforderungen entspricht. Also habe ich mich daran gemacht, eine andere Lösung zu implementieren. Die wichtigsten Punkte, die ich ansprechen wollte, sind:

Idiomatic Node.js

everyauth macht ausgiebigen Gebrauch von Versprechungen, anstatt Nodes Ansatz, Rückrufe und Schließungen zu verwenden. Versprechen sind ein alternativer Ansatz zur asynchronen Programmierung. Obwohl ich in einigen Situationen auf hoher Ebene nützlich war, war ich mit einer Authentifizierungsbibliothek nicht zufrieden, die diese Auswahl für meine Anwendung erzwang.

Darüber hinaus stelle ich fest, dass die ordnungsgemäße Verwendung von Callbacks und Closures einen prägnanten, gut strukturierten (fast funktionalen) Code ergibt. Ein Großteil der Macht von Node selbst ergibt sich aus dieser Tatsache, und Passport folgt dem Beispiel.

Modular

Passport verwendet ein Strategieentwurfsmuster, um eine klare Trennung von Bedenken zwischen dem Kernmodul und verschiedenen Authentifizierungsmechanismen zu definieren. Dies hat eine Reihe von Vorteilen, einschließlich einer geringeren Gesamtcodegröße und gut definierter und testbarer Schnittstellen.

Vergleichen Sie zur Veranschaulichung den Unterschied zwischen der Ausführung von $ npm install passport Und $ npm install everyauth. Mit Passport können Sie Ihre Anwendung nur mit den Abhängigkeiten erstellen, die Sie tatsächlich benötigen.

Diese modulare Architektur hat sich als anpassungsfähig erwiesen und ermöglicht einer Community, die Unterstützung für eine Vielzahl von Authentifizierungsmechanismen implementiert hat, einschließlich OpenID, OAuth, BrowserID, SAML usw.

Flexibel

Passport ist nur Middleware und verwendet die von Connect and Express festgelegte Konvention fn(req, res, next).

Dies bedeutet, dass es keine Überraschungen gibt , wenn Sie definieren, wo Sie Ihre Routen möchten und wann Sie die Authentifizierung verwenden möchten. Es gibt auch keine Abhängigkeiten von einem bestimmten Framework. Passport wird erfolgreich mit anderen Frameworks wie Flatiron verwendet

Im Gegensatz dazu kann jedes Modul in everyauth Routen in Ihre Anwendung einfügen. Dies kann das Debuggen erschweren, da es nicht offensichtlich ist, wie eine Route versendet wird und zu einer engen Kopplung mit einem bestimmten Framework führt.

Passport führt auch Fehler auf eine Weise durch, die neben Fehlerbehandlung Middleware, wie von Express definiert, völlig konventionell ist.

Im Gegensatz dazu hat jeder seine eigenen Konventionen, die nicht gut in den Problemraum passen und langjährige offene Probleme wie # 36 verursachen

API-Authentifizierung

Die Krönung jeder Authentifizierungsbibliothek ist ihre Fähigkeit, die API-Authentifizierung so elegant wie das webbasierte Anmelden zu handhaben.

Auf diesen Punkt werde ich nicht weiter eingehen. Ich ermutige die Leute jedoch, sich Passports Geschwisterprojekte anzuschauen: OAuthorize und OAuth2orize . Mit diesen Projekten können Sie die "Full-Stack" -Authentifizierung sowohl für HTML-/sitzungsbasierte Webanwendungen als auch für API-Clients implementieren.

Zuverlässig

Schließlich ist die Authentifizierung eine wichtige Komponente einer Anwendung, auf die Sie sich voll und ganz verlassen können möchten. everyauth hat eine lange Liste von Fragen von denen viele offen bleiben und im Laufe der Zeit wieder auftauchen. Meiner Meinung nach ist dies auf die geringe Abdeckung durch Unit-Tests zurückzuführen, was darauf hindeutet, dass die internen Schnittstellen in everyauth nicht angemessen definiert sind.

Im Gegensatz dazu sind die Schnittstellen und Strategien von Passport klar definiert und werden in Unit-Tests ausführlich behandelt. Issues gegen Passport eingereicht werden, sind in der Regel kleinere Feature-Anfragen, anstatt Fehler in Bezug auf die Authentifizierung.

Obwohl es sich um ein jüngeres Projekt handelt, deutet diese Qualität auf eine ausgereiftere Lösung hin, die einfacher zu warten ist und der man auch in Zukunft vertrauen kann.

188
Jared Hanson

Reisepass

  • modular und transparent
  • gute docs
  • community-Beiträge (aufgrund der Modularität)
  • arbeitet mit jedem und seinem Hund zusammen (wieder aufgrund seiner Modularität)

Everyauth

  • lange entwicklungsgeschichte, ausgereift.
  • nicht mehr gepflegt
  • tolle docs
  • arbeitet mit einer breiten Palette von Dienstleistungen
18
Waylon Flinn

Ich bin gerade damit fertig, von jedem zum Reisepass zu wechseln. Die Gründe waren die folgenden.

  1. Everyauth ist nicht stabil genug. Der letzte Strohhalm war letzte Woche, als ich von einem mysteriösen Problem gebissen wurde, bei dem die Facebook-Authentifizierung auf local.Host und in der Produktionsumgebung funktionieren würde, aber nicht in meiner Testumgebung auf heroku, selbst mit identischem Code und Datenbanken und einer neuen Heroku-App-Instanz. Zu diesem Zeitpunkt gingen mir die Theorien zur Eingrenzung des Problems aus, so dass das Entfernen von everyauth der logische nächste Schritt war.
  2. Die Art und Weise, wie die Standardauthentifizierung mithilfe von Benutzernamen/Kennwort-Anmeldeinformationen unterstützt wird, lässt sich nicht einfach in einen Web-App-Ansatz mit nur einer Seite integrieren.
  3. Ich konnte nicht alle dazu bringen, mit Google-Konten zu arbeiten.
  4. Die aktive Entwicklung jedes Einzelnen scheint rückläufig zu sein.

Der Port war überraschend schmerzfrei und dauerte nur wenige Stunden, einschließlich manueller Tests.

Daher empfehle ich natürlich, einen Reisepass anzustreben.

16

Ich habe Everyauth zuerst ausprobiert und bin seitdem zu Passport gegangen. Es kam mir etwas flexibler vor, vor allem. wenn (zum Beispiel) ich unterschiedliche Logik für unterschiedliche Versorger benötige. Es macht es auch einfacher (imo), benutzerdefinierte Authentifizierungsstrategien zu konfigurieren. Andererseits hat es nicht die Ansichtshilfen, wenn diese für Sie wichtig sind.

4
Paul

Dies antwortet ein bisschen spät, aber ich habe diesen Thread gefunden und (nachdem ich alle negativen Rückmeldungen über Everyauth gehört hatte) beschlossen, Passport zu verwenden ... und es dann gehasst. Es war undurchsichtig, funktionierte nur als Middleware (Sie konnten sich beispielsweise nicht von einem GraphQL-Endpunkt aus authentifizieren), und ich traf mehr als einen schwer zu debuggenden Fehler (z. B. Wie habe ich zwei Express-Sitzungen? =).

Also ging ich auf die Suche und fand https://github.com/jed/authom . Für meine Bedürfnisse ist dies eine viel bessere Bibliothek! Es ist etwas untergeordneter als die beiden anderen Bibliotheken, also müssen Sie den Benutzer selbst in die Sitzung einbinden ... aber das ist nur eine Zeile, also ist es wirklich keine große Sache.

Noch wichtiger ist, dass Sie durch das Design viel mehr Kontrolle haben und Ihre Autorisierung auf einfache Weise so implementieren können, wie Sie es möchten und nicht so, wie es Passport beabsichtigt hat. Außerdem ist es im Vergleich zu Passport viel einfacher und leichter zu erlernen.

2
machineghost

Ich habe Everyauth verwendet, genauer gesagt Mongoose-Auth. Ich fand es schwierig, meine Dateien richtig aufzuteilen, ohne das everyauth-Modul zu demontieren. Passport ist meiner Meinung nach eine sauberere Methode zum Erstellen von Logins. Es gibt einen Bericht, den ich sehr hilfreich fand http://rckbt.me/2012/03/transitioning-from-mongoose-auth-to-passport/

2
user1441287

Notieren Sie das Datum dieses Beitrags. Es gibt an, wie relevant dieser Beitrag ist.

Meiner Erfahrung nach hat Everyauth mit seinem Passwort-Anmeldestil nicht sofort funktioniert. Ich benutze express3 und deklariere meine Middleware wie folgt: app.use(everyauth.middleware(app)); und es wurde immer noch nicht im everyauth local an meine Vorlage übergeben. Das letzte GIT-Commit war vor einem Jahr und ich glaube, dass jedes Jahr neue Pakete kaputt sind. Jetzt werde ich es mit dem Pass versuchen.

1
Harsh Singh