Everyauth vs Passport.js?

122

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?

EhevuTov
quelle
Eine andere Alternative ist die Verwendung von Grant - nur, wenn Sie nach OAuth-Middleware suchen. Es unterstützt Hunderte von Anbietern und wird über eine einfache JSON-Datenstruktur konfiguriert.
Simo

Antworten:

191

Ich stimme mit meinen zwei Cent als Entwickler von Passport überein .

Vor der Entwicklung von Passport habe ich jeden bewertet und festgestellt, dass es nicht meinen Anforderungen entspricht. Also machte ich mich daran, eine andere Lösung zu implementieren, die dies tun würde. Die wichtigsten Punkte, die ich ansprechen wollte, sind:

Idiomatic Node.js

Everyauth nutzt Versprechen in großem Umfang, anstatt Node's 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 meiner Anwendung aufzwang.

Darüber hinaus finde ich, dass die ordnungsgemäße Verwendung von Rückrufen und Schließungen einen präzisen, gut strukturierten (fast funktionalen) Code liefert. Ein Großteil der Macht von Node selbst beruht auf dieser Tatsache, und Passport folgt diesem Beispiel.

Modular

Passport verwendet ein Strategieentwurfsmuster, um eine klare Trennung der 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 Laufen $ npm install passportund $ npm install everyauth. Mit Passport können Sie Ihre Anwendung nur mit den tatsächlich benötigten Abhängigkeiten erstellen.

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 fn(req, res, next)von Connect und Express festgelegte Konvention.

Dies bedeutet, dass es keine Überraschungen gibt , da 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. Menschen verwenden Passport erfolgreich mit anderen Frameworks wie Flatiron

Im Gegensatz dazu kann jedes Modul in jeder Datei 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 weist auch Fehler auf eine völlig konventionelle Weise auf, neben der von Express definierten Middleware zur Fehlerbehandlung .

Im Gegensatz dazu hat everyauth seine eigenen Konventionen, die nicht gut in den Problembereich passen und zu langjährigen offenen Problemen wie # 36 führen

API-Authentifizierung

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

Ich werde auf diesen Punkt nicht viel näher eingehen. Ich ermutige die Leute jedoch, sich die Geschwisterprojekte von Passport, OAuthorize und OAuth2orize , anzuschauen . 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. Everyauth hat eine lange Liste von Themen, von denen viele offen bleiben und im Laufe der Zeit wieder auftauchen. Meiner Meinung nach ist dies auf eine geringe Abdeckung durch Unit-Tests zurückzuführen, was darauf hindeutet, dass die internen Schnittstellen in jedem Auto nicht angemessen definiert sind.

Im Gegensatz dazu sind die Schnittstellen und Strategien von Passport klar definiert und werden durch Unit-Tests umfassend abgedeckt. Bei Passport eingereichte Probleme sind in der Regel eher geringfügige Funktionsanforderungen als Fehler im Zusammenhang mit der Authentifizierung.

Obwohl es sich um ein jüngeres Projekt handelt, deutet dieses Qualitätsniveau auf eine ausgereiftere Lösung hin, die in Zukunft einfacher zu warten und vertrauenswürdig ist.

Jared Hanson
quelle
9
@EhevuTov> wähle diese Antwort, sie ist viel vollständiger als meine und ich stimme seinen Beobachtungen zu 100% zu.
Paul
1
@ Jared Hanson: Haben Sie ein Beispiel für die Verwendung des Passes mit RESTfull auth?
Naor
5
Ich sehe nicht, wie Versprechen die genannten Vorteile des Vanille-Rückrufstils wirklich verändern. In Szenarien, in denen eine lineare Reihe von Ereignissen zusätzliche Rückrufe auslöst, machen Sie fast dasselbe mit weniger Code.
Erik Reppen
1
Stimmen Sie @ErikReppen zu, dass Versprechen in diesem Vergleich irrelevant sind.
Vicneanschi
Ironischerweise hat der Pass jetzt viel mehr Probleme: github.com/jaredhanson/passport/issues (273 vs. 148 für jeden).
Anton Bessonov
19

Reisepass

  • modular und transparent
  • gute docs
  • Community-Beiträge (aufgrund seiner Modularität)
  • funktioniert mit allen und ihrem Hund (wieder aufgrund seiner Modularität)

Everyauth

  • lange Entwicklungsgeschichte, reif.
  • nicht mehr gepflegt
  • tolle docs
  • arbeitet mit einer Vielzahl von Dienstleistungen
Waylon Flinn
quelle
1
Everyauth wird nicht mehr aktiv gepflegt.
YasharF
1
@ YasharF danke, dass du mich informiert hast. Antwort wurde aktualisiert
Waylon Flinn
Heads up, dass Passport auch nicht mehr gepflegt zu sein scheint. Das letzte funktionale Commit wurde vor 2 Jahren durchgeführt und es gibt 300 offene Fragen.
Uri
16

Ich bin gerade mit dem Wechsel von Everyauth zu Pass fertig. 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 identischen Datenbanken und einer neuen Heroku-App-Instanz. Zu diesem Zeitpunkt gingen mir die Theorien aus, wie das Problem eingegrenzt werden kann. Daher war das Entfernen von Everyauth der logische nächste Schritt.
  2. Die Art und Weise, wie die Standardauthentifizierung mithilfe von Anmeldeinformationen für Benutzername und Kennwort unterstützt wird, lässt sich nicht einfach in einen Web-App-Ansatz für eine einzelne Seite integrieren.
  3. Ich konnte nicht jeden dazu bringen, mit Google-Konten zu arbeiten.
  4. Die aktive Entwicklung von Everyauth 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 zu beantragen.

Gudlaugur Egilsson
quelle
Vielen Dank für die wahre Geschichte, obwohl der letzte Strohhalm nicht klar ist.
Andrew_1510
4

Ich habe Everyauth zuerst ausprobiert und bin seitdem zu Passport gegangen. Es kam mir etwas flexibler vor, insb. wenn (zum Beispiel) ich unterschiedliche Logik für unterschiedliche Anbieter benötige. Es macht es auch einfacher (imo), benutzerdefinierte Authentifizierungsstrategien zu konfigurieren. Auf der anderen Seite gibt es keine Ansichtshelfer, wenn diese für Sie wichtig sind.

Paul
quelle
Mir ist aufgefallen, dass Passport.js sagt, dass es Bedenken spaltet, und ich frage mich, ob everyauth ähnlich aufgebaut ist.
EhevuTov
2

Ich habe Everyauth verwendet, genauer gesagt Mungo-Auth. Es fiel mir schwer, meine Dateien richtig aufzuteilen, ohne das everyauth-Modul zu zerlegen. Passport ist meiner Meinung nach eine sauberere Methode zum Erstellen von Anmeldungen. Es gibt einen Artikel, den ich sehr hilfreich fand. Http://rckbt.me/2012/03/transitioning-from-mongoose-auth-to-passport/

user1441287
quelle
2

Dies antwortet etwas spät, aber ich fand diesen Thread und entschied mich (nachdem ich alle negativen Rückmeldungen über Everyauth gehört hatte), Passport zu verwenden ... und hasste ihn dann. Es war undurchsichtig, funktionierte nur als Middleware (Sie konnten sich beispielsweise nicht von einem GraphQL-Endpunkt aus authentifizieren), und ich habe mehr als einen schwer zu debuggenden Fehler festgestellt (z. B. wie habe ich zwei Express-Sitzungen? ).

Also habe ich nach https://github.com/jed/authom gesucht . Für meine Bedürfnisse ist dies eine viel bessere Bibliothek! Es ist etwas niedriger als die beiden anderen Bibliotheken, daher müssen Sie beispielsweise den Benutzer selbst in die Sitzung einbeziehen ... aber das ist nur eine Zeile, also ist es wirklich keine große Sache.

Noch wichtiger ist, dass das Design Ihnen viel mehr Kontrolle gibt und es Ihnen einfach macht, Ihre Autorisierung so zu implementieren, 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.

Maschinenhost
quelle
1

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

Nach meiner Erfahrung hat Everyauth mit seinem Passwort-Anmeldestil nicht sofort funktioniert. Ich verwende Express3 und deklariere meine Middleware so, app.use(everyauth.middleware(app));und sie wurde immer noch nicht in der lokalen Datei an meine Vorlage übergeben. Das letzte Git-Commit war vor einem Jahr und ich glaube, neue Pakete sind jeden Tag kaputt gegangen. Jetzt werde ich es mit dem Pass versuchen.

Harsh Singh
quelle