Everyauth против Passport.js?

Everyauth и Passport.js, похоже, имеет очень похожие наборы функций. Каковы некоторые из положительных и отрицательных сравнений между ними, которые заставили бы меня использовать одно вместо другого?


person EhevuTov    schedule 15.08.2012    source источник
comment
Другой альтернативой является использование Grant - это только если вы ищете OAuth. промежуточное ПО. Он поддерживает сотни поставщиков и настраивается с помощью простой структуры данных JSON.   -  person simo    schedule 20.07.2015


Ответы (7)


Включаю свои два цента как разработчик Passport.

Перед разработкой Passport я проверил все проверки и определил, что они не соответствуют моим требованиям. Итак, я приступил к реализации другого решения, которое могло бы. Я хотел бы остановиться на следующих основных моментах:

Идиоматический Node.js

Everyauth широко использует обещания вместо подхода Node с использованием обратных вызовов и замыканий. Обещания - это альтернативный подход к асинхронному программированию. Хотя это было полезно в некоторых высокоуровневых ситуациях, мне было неудобно с библиотекой аутентификации, заставляющей мой выбор делать этот выбор.

Кроме того, я считаю, что правильное использование обратных вызовов и замыканий дает краткий, хорошо спроектированный (почти функциональный) код. Большая часть возможностей самого Node проистекает из этого факта, и Passport следует его примеру.

Модульный

Passport использует шаблон разработки стратегии для четкого разделения задач между основным модулем и различными механизмами аутентификации. Это дает ряд преимуществ, включая меньший общий размер кода и хорошо определенные и тестируемые интерфейсы.

В качестве базовой иллюстрации сравните разницу между запуском $ npm install passport и $ npm install everyauth. Passport позволяет создавать приложение, используя только те зависимости, которые вам действительно нужны.

Эта модульная архитектура зарекомендовала себя адаптируемой, облегчая сообщество, которое реализовало поддержку широкого спектра механизмов аутентификации, включая OpenID, OAuth, BrowserID, SAML и т. Д.

Гибкость

Passport - это просто промежуточное ПО, использующее соглашение fn(req, res, next), установленное Connect и Express.

Это означает, что нет никаких сюрпризов, поскольку вы определяете, где вы хотите использовать свои маршруты и когда хотите использовать аутентификацию. Также нет никаких зависимостей от конкретного фреймворка. Люди успешно используют Passport с другими фреймворками, такими как Flatiron.

Напротив, любой модуль в everyauth может вставлять маршруты в ваше приложение. Это может затруднить отладку, поскольку неочевидно, как будет отправляться маршрут, и это приводит к тесной связи с конкретной структурой.

Passport также вызывает ошибки совершенно обычным образом, как и промежуточное программное обеспечение обработки ошибок, определенное Express.

Напротив, у каждого аутентификации есть свои собственные соглашения, которые плохо вписываются в проблемное пространство, вызывая давние открытые проблемы, такие как # 36

Аутентификация API

Главным достижением любой библиотеки аутентификации является ее способность обрабатывать аутентификацию API так же элегантно, как и вход через Интернет.

Я не буду вдаваться в подробности по этому поводу. Однако я призываю людей изучить родственные проекты Passport, OAuthorize и OAuth2orize. Используя эти проекты, вы можете реализовать «полную» аутентификацию как для веб-приложений на основе HTML / сеансов, так и для клиентов API.

Надежный

Наконец, аутентификация - это критически важный компонент приложения, на который вы хотите полностью положиться. У everyauth длинный список проблем, многие из которых остаются открытыми и всплывают со временем. На мой взгляд, это связано с низким уровнем охвата модульным тестом, что само по себе говорит о том, что внутренние интерфейсы в everyauth не определены должным образом.

Напротив, интерфейсы Passport и его стратегии четко определены и широко охватываются модульными тестами. Проблемы, поданные против Passport, как правило, в основном представляют собой незначительные запросы функций, а не ошибки, связанные с аутентификацией.

Несмотря на то, что это более молодой проект, этот уровень качества предполагает более зрелое решение, которое легче поддерживать и которому в будущем будет доверять.

person Jared Hanson    schedule 15.08.2012
comment
@EhevuTov ›выберите этот ответ, он намного более полный, чем мой, и я на 100% согласен с его наблюдениями. - person Paul; 16.08.2012
comment
@ Джаред Хэнсон: У вас есть пример использования паспорта с RESTfull auth? - person Naor; 28.05.2013
comment
Я не понимаю, как обещания действительно меняют упомянутые преимущества ванильного стиля обратного вызова. Вы в значительной степени делаете то же самое с меньшим количеством кода в сценариях, где линейная последовательность событий запускает дополнительные обратные вызовы. - person Erik Reppen; 11.12.2014
comment
Согласитесь с @ErikReppen, что обещания не имеют отношения к этому сравнению. - person vicneanschi; 02.04.2016
comment
Как ни странно, но с паспортом сейчас проблем гораздо больше: github.com/jaredhanson/passport/issues ( 273 против 148 для каждой аутентификации). - person Anton Bessonov; 29.07.2018
comment
Извините, но паспорт очень сложный. У него ужасная документация. И все еще использую вещи из прошлого (подход обратного вызова). И я даже не считаю отсутствие поддержки (ни решенных вопросов, ни объединенной пр) - person iwaduarte; 18.05.2021

Заграничный пасспорт

  • модульный и прозрачный
  • хорошие документы
  • вклад сообщества (благодаря модульности)
  • работает со всеми и их собакой (опять же, благодаря модульности)

Everyauth

  • долгая история развития, зрелая.
  • больше не поддерживается
  • отличные документы
  • работает с широким спектром услуг
person Waylon Flinn    schedule 15.08.2012
comment
Everyauth больше не поддерживается. - person YasharF; 03.08.2018
comment
@YasharF спасибо, что сообщили мне. Ответ обновлен - person Waylon Flinn; 07.08.2018
comment
Обратите внимание, что паспорт, похоже, тоже больше не поддерживается. Последняя функциональная фиксация была сделана 2 года назад, и есть 300 открытых проблем. - person Uri; 06.06.2019

Только что закончил переход со всех прав на паспорт. Причины были следующие.

  1. Everyauth недостаточно стабилен. Последней каплей стало то, что на прошлой неделе меня укусила загадочная проблема, когда аутентификация facebook работала на local.host и в производственной среде, но не в моей тестовой среде на heroku, даже с идентичным кодом и базами данных и новым экземпляром приложения heroku. На тот момент у меня закончились теории относительно того, как изолировать проблему, поэтому логическим следующим шагом было удаление всех аутентификаций.
  2. Способ, которым он обеспечивает поддержку стандартной аутентификации с использованием учетных данных имени пользователя и пароля, нелегко интегрировать с подходом одностраничного веб-приложения.
  3. Мне не удалось настроить все для работы с учетными записями Google.
  4. Похоже, что активное развитие Everyauth идет на спад.

Перенос прошел на удивление безболезненно, занял всего несколько часов, включая ручное тестирование.

Поэтому, очевидно, я рекомендую пойти за паспортом.

person Gudlaugur Egilsson    schedule 26.05.2013
comment
Спасибо за правдивую историю, хотя последняя капля не ясна. - person Andrew_1510; 08.02.2014

Сначала я попробовал Everyauth и с тех пор перешел на Passport. Мне он показался несколько более гибким, особенно. если (например) мне нужна разная логика для разных провайдеров. Это также упрощает (imo) настройку пользовательских стратегий аутентификации. С другой стороны, у него нет помощников просмотра, если они важны для вас.

person Paul    schedule 15.08.2012
comment
Я заметил, что в Passport.js говорится, что он разделяет проблемы, и мне интересно, устроен ли Everyauth аналогичным образом. - person EhevuTov; 15.08.2012

Этот ответ немного запоздал, но я нашел эту ветку и (услышав все отрицательные отзывы о Everyauth) решил использовать Passport ... а затем возненавидел его. Он был непрозрачным, работал только как промежуточное ПО (например, вы не могли пройти аутентификацию из конечной точки GraphQL), и я обнаружил более одной трудной для отладки ошибки (например, Как мне провести два экспресс-сеанса?).

Я пошел искать и нашел https://github.com/jed/authom. Для моих нужд это гораздо лучшая библиотека! Это немного ниже уровня, чем две другие библиотеки, поэтому вам нужно делать такие вещи, как вводить пользователя в сеанс самостоятельно ... но это только одна строка, так что это действительно не имеет большого значения.

Что еще более важно, его дизайн дает вам гораздо больше контроля, упрощая реализацию вашей авторизации так, как вы хотите, а не так, как предполагал Passport. Кроме того, по сравнению с Passport он намного проще и легче в освоении.

person machineghost    schedule 14.02.2018

Раньше я использовал Everyauth, более конкретно, mongoose-auth. Мне было трудно правильно разделить мои файлы без демонтажа модуля everyauth. На мой взгляд, паспорт - более чистый метод создания логинов. Есть запись, которую я нашел очень полезной http://rckbt.me/2012/03/transitioning-from-mongoose-auth-to-passport/

person user1441287    schedule 16.04.2013

Обратите внимание на дату публикации, она покажет, насколько актуален этот пост.

По моему опыту, Everyauth не работает из коробки с паролем для входа в систему. Я использую express3, и я объявляю свое промежуточное ПО таким образом app.use(everyauth.middleware(app));, но оно все еще не передается в каждый локальный идентификатор моего шаблона. Последний коммит git был год назад, и я полагаю, что новые пакеты нарушили все аутентификации. Сейчас попробую паспорт.

person Harsh Singh    schedule 06.04.2013