web-dev-qa-db-fra.com

Everyauth vs Passport.js?

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?

120
EhevuTov

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.

188
Jared Hanson

Passeport

  • modulaire et transparent
  • bons docs
  • contributions de la communauté (grâce à sa modularité)
  • fonctionne avec tout le monde et leur chien (encore une fois, grâce à sa modularité)

Tout le monde

  • longue histoire de développement, mature.
  • n'est plus maintenu
  • grands docs
  • fonctionne avec une large gamme de services
18
Waylon Flinn

Je viens juste de changer de passeport en passe Les raisons étaient les suivantes.

  1. Tout le monde n'est pas assez stable. La dernière goutte a été ma semaine dernière par un problème mystérieux dans lequel l'authentification Facebook fonctionnerait sur local.Host et sur l'environnement de production, mais pas dans mon environnement de test sur heroku, même avec un code et des bases de données identiques et une nouvelle instance d'application heroku. À ce moment-là, les théories sur la manière d’isoler le problème n’étaient plus au rendez-vous. C’est pourquoi il était logique de supprimer tous les automates.
  2. La manière dont il prend en charge l'authentification standard à l'aide des informations d'identification de nom d'utilisateur/mot de passe n'est pas facilement intégrée à une approche d'application Web à page unique.
  3. Je n'ai pas pu faire en sorte que chaque utilisateur travaille avec des comptes Google.
  4. Le développement actif de chaque automne semble en déclin.

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.

16

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.

4
Paul

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.

2
machineghost

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/

2
user1441287

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.

1
Harsh Singh