Everyauth et Passport.js semblent avoir des ensembles de fonctionnalités très similaires. Quelles sont certaines des comparaisons positives et négatives entre les deux qui me donneraient envie d’utiliser l’une sur l’autre?
Entrer avec mes deux sous, en tant que développeur de Passport .
Avant de développer Passport, j’évaluais chaque utilisateur et déterminais qu’il ne répondait pas à mes exigences. Donc, je me suis mis à mettre en œuvre une solution différente qui le ferait. Les points principaux que je voulais aborder sont:
Node.js idiomatique
everyauth fait un usage intensif de promesses, au lieu de l'approche de Node consistant à utiliser des rappels et des fermetures. Les promesses sont une approche alternative à la programmation asynchrone. Bien que utile dans certaines situations de haut niveau, je n'étais pas à l'aise avec une bibliothèque d'authentification imposant ce choix à mon application.
En outre, j’estime qu’une utilisation appropriée des rappels et des fermetures donne un code concis, bien architecturé (style presque fonctionnel). Une grande partie de la puissance de Node lui-même provient de ce fait et Passport fait de même.
Modulaire
Passport utilise un modèle de conception de stratégie pour définir une séparation claire des problèmes entre le module principal et divers mécanismes d'authentification. Cela présente de nombreux avantages, notamment une taille de code globale plus réduite et des interfaces bien définies et testables.
Pour une illustration de base, comparez la différence entre exécuter $ npm install passport
Et $ npm install everyauth
. Passport vous permet de concevoir votre application en utilisant uniquement les dépendances dont vous avez réellement besoin.
Cette architecture modulaire s'est avérée être une solution adaptable, facilitant la tâche d'une communauté qui a implémenté la prise en charge d'un grand nombre de mécanismes d'authentification, notamment OpenID, OAuth, BrowserID, SAML, etc.
Flexible
Passport est juste un middleware , utilisant la convention fn(req, res, next)
établie par Connect et Express.
Cela signifie qu'il n'y a pas de surprises , car vous définissez où vous voulez que vos routes et quand vous voulez utiliser l'authentification. Il n'y a pas non plus de dépendances sur un framework spécifique. Les gens utilisent avec succès Passport avec d'autres frameworks tels que Flatiron
En revanche, n'importe quel module de chaque pays peut insérer des routes dans votre application. Cela peut rendre le débogage difficile, car la manière dont un itinéraire est envoyé n'est pas évident et conduit à un couplage étroit avec un cadre spécifique.
Passport commet également des erreurs d’une manière tout à fait conventionnelle, à côté du traitement des erreurs du middleware tel que défini par Express.
En revanche, chaque machine a ses propres conventions, qui ne s’adaptent pas bien à l’espace du problème et qui posent depuis longtemps des problèmes non résolus, tels que # 36
Authentification API
L’atout majeur de toute bibliothèque d’authentification est sa capacité à gérer l’authentification API de manière aussi élégante que la connexion Web.
Je ne donnerai pas beaucoup de détails sur ce point. Cependant, j'encourage les gens à se renseigner sur les projets frères de Passport, OAuthorize et OAuth2orize . À l'aide de ces projets, vous pouvez implémenter une authentification "full-stack", à la fois pour les applications Web HTML/session et les clients API.
Fiable
Enfin, l’authentification est un composant essentiel d’une application sur laquelle vous souhaitez pouvoir vous appuyer pleinement. everyauth a une longue liste de problèmes dont beaucoup restent ouverts et refont surface au fil du temps. À mon avis, cela est dû à la faible couverture de tests unitaires, ce qui suggère que les interfaces internes de chaque ordinateur ne sont pas correctement définies.
En revanche, les interfaces et les stratégies de Passport sont bien définies et largement couvertes par des tests unitaires. Problèmes classés contre Passport sont généralement des demandes de fonctionnalités mineures, plutôt que des bogues liés à l'authentification.
Bien qu’il s’agisse d’un projet plus jeune, ce niveau de qualité suggère une solution plus mature, plus facile à gérer et plus fiable.
Je viens juste de changer de passeport en passe Les raisons étaient les suivantes.
Le port était étonnamment indolore et ne prenait que quelques heures, y compris les tests manuels.
Donc, évidemment, je recommande d'aller pour le passeport.
J'ai d'abord essayé Everyauth et je suis depuis parti pour Passeport. Cela m'a paru un peu plus souple, surtout si (par exemple) j'ai besoin d'une logique différente pour différents fournisseurs. Cela facilite également (imo) la configuration de stratégies d'authentification personnalisées. D'autre part, il n'a pas les aides de vue, si ceux-ci sont importants pour vous.
Cela répond un peu tard, mais j'ai trouvé ce fil et (après avoir entendu tous les commentaires négatifs à propos de Everyauth), j'ai décidé d'utiliser Passport ... et je l'ai détesté. Il était opaque, ne fonctionnait que comme middleware (par exemple, vous ne pouviez pas vous authentifier à partir d’un noeud final GraphQL), et j’ai heurté plus d’un bogue difficile à déboguer (par exemple. Comment puis-je avoir deux sessions Express? =).
Alors je suis allé chercher et j'ai trouvé https://github.com/jed/authom . Pour mes besoins, c'est une bien meilleure bibliothèque! C'est un peu plus bas que les deux autres bibliothèques, vous devez donc faire vous-même, par exemple, faire entrer l'utilisateur dans la session ... mais ce n'est qu'une ligne, donc ce n'est pas grave.
Plus important encore, sa conception vous donne beaucoup plus de contrôle, ce qui facilite la mise en œuvre de votre autorisation comme vous le souhaitez et non comme prévu par Passport. De plus, comparé à Passport, il est beaucoup plus simple et plus facile à apprendre.
J'utilisais Everyauth plus spécifiquement mongoose-auth. J'ai eu du mal à séparer mes fichiers correctement sans démonter le module everyauth. À mon avis, Passport est une méthode plus propre pour la création de connexions. Il y a un article que j'ai trouvé très utile http://rckbt.me/2012/03/transitioning-from-mongoose-auth-to-passport/
Notez la date de cet article, il indiquera dans quelle mesure ce message est pertinent.
D'après mon expérience, Everyauth ne fonctionnait pas avec le style de connexion par mot de passe. J'utilise express3 et je déclare mon middleware comme tel app.use(everyauth.middleware(app));
et il ne passait toujours pas dans le Everyauth local à mon modèle. Le dernier engagement de git remonte à l’année dernière et j’imagine que de nouveaux paquets ont volé à la corde. Maintenant, je vais essayer le passeport.