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?
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?
Risposte:
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 passport
e $ 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.
Ho appena finito di cambiare da everyauth a passport. Le ragioni erano le seguenti.
Il porting è stato sorprendentemente indolore, richiedendo solo poche ore, inclusi i test manuali.
Quindi, ovviamente, consiglio di andare per il passaporto.
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.
Usavo Everyauth in modo più specifico mongoose-auth. Ho trovato difficile dividere correttamente i miei file senza smantellare il modulo everyauth. Passport secondo me è un metodo più pulito per la creazione di accessi. C'è un articolo che ho trovato molto utile http://rckbt.me/2012/03/transitioning-from-mongoose-auth-to-passport/
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.
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.