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?
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?
Antworten:
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 passport
und $ 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.
Ich bin gerade mit dem Wechsel von Everyauth zu Pass fertig. Die Gründe waren die folgenden.
Der Port war überraschend schmerzfrei und dauerte nur wenige Stunden, einschließlich manueller Tests.
Daher empfehle ich natürlich, einen Reisepass zu beantragen.
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.
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/
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.
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.