Everyauth vs Passport.js?


122

Everyauth e Passport.js sembrano avere set di funzionalità molto simili. Quali sono alcuni dei confronti positivi e negativi tra i due che mi farebbero desiderare di utilizzare uno sull'altro?


Un'altra alternativa è usare Grant , solo se stai cercando middleware OAuth. Supporta centinaia di provider ed è configurato tramite una struttura dati JSON semplice.
simo

Risposte:


191

Intervenendo con i miei due centesimi, come sviluppatore di Passport .

Prima di sviluppare Passport, ho valutato ogni autore e ho stabilito che non soddisfaceva i miei requisiti. Quindi, ho deciso di implementare una soluzione diversa che sarebbe. I punti principali che volevo affrontare sono:

Idiomatic Node.js

everyauth fa ampio uso delle promesse, invece dell'approccio di Node di utilizzare callback e chiusure. Le promesse sono un approccio alternativo alla programmazione asincrona. Sebbene utile in alcune situazioni di alto livello, non mi sentivo a mio agio con una libreria di autenticazione che imponeva questa scelta sulla mia applicazione.

Inoltre, trovo che un uso corretto dei callback e delle chiusure produca un codice conciso e ben progettato (stile quasi funzionale). Gran parte del potere di Node stesso deriva da questo fatto e Passport segue l'esempio.

componibile

Passport utilizza un modello di progettazione strategica per definire una netta separazione delle preoccupazioni tra il modulo principale e vari meccanismi di autenticazione. Ciò ha una serie di vantaggi, tra cui una dimensione complessiva del codice inferiore e interfacce ben definite e testabili.

Per un'illustrazione di base, confronta la differenza tra corsa $ npm install passporte $ npm install everyauth. Passport ti consente di creare la tua applicazione utilizzando solo le dipendenze di cui hai effettivamente bisogno.

Questa architettura modulare si è dimostrata adattabile, facilitando una comunità che ha implementato il supporto per un'ampia varietà di meccanismi di autenticazione, inclusi OpenID, OAuth, BrowserID, SAML, ecc.

Flessibile

Passport è solo middleware , che utilizza la fn(req, res, next)convenzione stabilita da Connect ed Express.

Ciò significa che non ci sono sorprese , poiché definisci dove vuoi i tuoi percorsi e quando vuoi usare l'autenticazione. Inoltre, non esistono dipendenze da un framework specifico. Le persone utilizzano con successo Passport con altri framework come Flatiron

Al contrario, qualsiasi modulo in everyauth può inserire rotte nella tua applicazione. Ciò può rendere difficile il debug, poiché non è ovvio come verrà inviato un percorso e porta a uno stretto accoppiamento con un framework specifico.

Passport inoltre commette errori in un modo del tutto convenzionale, accanto al middleware di gestione degli errori definito da Express.

Al contrario, everyauth ha le proprie convenzioni, che non si adattano bene allo spazio del problema, causando problemi aperti di vecchia data come # 36

Autenticazione API

Il coronamento di qualsiasi libreria di autenticazione è la sua capacità di gestire l'autenticazione API con la stessa eleganza dell'accesso basato sul Web.

Non approfondirò molto su questo punto. Tuttavia, incoraggio le persone a esaminare i progetti fratelli di Passport, OAuthorize e OAuth2orize . Utilizzando questi progetti, puoi implementare l'autenticazione "full-stack", sia per le app Web basate su HTML / sessione che per i client API.

Affidabile

Infine, l'autenticazione è un componente critico di un'applicazione e su cui si desidera poter contare completamente. everyauth ha un lungo elenco di problemi, molti dei quali rimangono aperti e riaffiorano nel tempo. A mio parere, ciò è dovuto alla bassa copertura di unit test, che a sua volta suggerisce che le interfacce interne in everyauth non sono adeguatamente definite.

Al contrario, le interfacce di Passport e le sue strategie sono ben definite e ampiamente coperte da unit test. I problemi presentati contro Passport tendono ad essere principalmente richieste di funzionalità minori, piuttosto che bug relativi all'autenticazione.

Nonostante sia un progetto più giovane, questo livello di qualità suggerisce una soluzione più matura che è più facile da mantenere e di cui fidarsi in futuro.


9
@EhevuTov> scegli questa risposta, è molto più completa della mia e sono d'accordo al 100% con le sue osservazioni.
Paul

1
@ Jared Hanson: hai qualche esempio di come utilizzare il passaporto con l'autenticazione RESTfull?
Naor

5
Non vedo come le promesse cambino davvero i citati benefici dello stile di richiamata vaniglia. Stai praticamente facendo la stessa cosa con meno codice in scenari in cui una serie lineare di eventi attiva callback aggiuntivi.
Erik Reppen

1
D'accordo con @ErikReppen che le promesse sono irrilevanti in questo confronto.
vicneanschi

Ironia della sorte, ma il passaporto ha molti più problemi ora: github.com/jaredhanson/passport/issues (273 contro 148 per everyauth).
Anton Bessonov

19

Passaporto

  • modulare e trasparente
  • buoni documenti
  • contributi della comunità (grazie alla sua modularità)
  • funziona con tutti e con il loro cane (di nuovo, grazie alla sua modularità)

Everyauth

  • lunga storia di sviluppo, maturo.
  • non è più mantenuto
  • ottimi documenti
  • funziona con una vasta gamma di servizi

1
Everyauth non viene più mantenuto attivamente.
YasharF

1
@YasharF grazie per avermelo fatto sapere. La risposta è stata aggiornata
Waylon Flinn

Attenzione che neanche Passport sembra più essere mantenuto. L'ultimo commit funzionale è stato effettuato 2 anni fa e ci sono 300 problemi aperti.
Uri

16

Ho appena finito di cambiare da everyauth a passport. Le ragioni erano le seguenti.

  1. Everyauth non è abbastanza stabile. L'ultima goccia è stata la scorsa settimana che sono stato morso da un misterioso problema in cui l'autenticazione di Facebook avrebbe funzionato su local.host e sull'ambiente di produzione, ma non nel mio ambiente di test su heroku, anche con codice e database identici e una nuova istanza dell'app heroku. A quel punto ho esaurito le teorie su come isolare il problema, quindi rimuovere everyauth è stato il passaggio logico successivo.
  2. Il modo in cui fornisce il supporto per l'autenticazione standard utilizzando credenziali nome utente / password non è facilmente integrabile con un approccio di app Web a pagina singola.
  3. Non sono riuscito a far funzionare tutti gli autori con gli account Google.
  4. Lo sviluppo attivo di everyauth sembra in declino.

Il porting è stato sorprendentemente indolore, richiedendo solo poche ore, inclusi i test manuali.

Quindi, ovviamente, consiglio di andare per il passaporto.


Grazie per la storia vera, anche se l'ultima goccia non è chiara.
Andrew_1510

4

Ho provato prima Everyauth e da allora sono passato a Passport. Mi ha colpito come un po 'più flessibile, specialmente. se (ad esempio) ho bisogno di una logica diversa per diversi fornitori. Rende anche più facile (imo) configurare strategie di autenticazione personalizzate. D'altra parte, non ha gli aiutanti di visualizzazione, se quelli sono importanti per te.


Ho notato che Passport.js dice che divide le preoccupazioni e mi chiedo se everyauth sia costruito in modo simile.
EhevuTov


2

Questo risponde un po 'tardi, ma ho trovato questo thread e (dopo aver sentito tutti i feedback negativi su Everyauth) ho deciso di usare Passport ... e poi l'ho odiato. Era opaco, funzionava solo come middleware (non era possibile autenticarsi da un endpoint GraphQL, ad esempio) e ho riscontrato più di un bug difficile da eseguire il debug (ad esempio, come posso avere due sessioni Express? ).

Quindi sono andato a cercare e ho trovato https://github.com/jed/authom . Per le mie esigenze questa è una libreria molto migliore! È di un livello leggermente inferiore rispetto alle altre due librerie, quindi devi fare cose come inserire l'utente nella sessione da solo ... ma questa è solo una riga, quindi non è davvero un grosso problema.

Ancora più importante, il suo design ti offre molto più controllo, semplificando l'implementazione dell'autorizzazione nel modo desiderato e non nel modo previsto da Passport. Inoltre, rispetto a Passport è molto più semplice e facile da imparare.


1

Annota la data di questo post, indicherà quanto sia rilevante questo post.

Nella mia esperienza, Everyauth non ha funzionato immediatamente con il suo stile di accesso con password. Sto usando express3 e dichiaro il mio middleware in questo modo app.use(everyauth.middleware(app));e non è ancora passato in everyauth local al mio modello. L'ultimo commit di git è stato un anno fa e immagino che i nuovi pacchetti abbiano rotto tutti. Adesso proverò con il passaporto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.