Everyauth против Passport.js?

122

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

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

Ответы:

191

Вкладываю свои два цента как разработчик 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, как правило, в основном представляют собой незначительные запросы функций, а не ошибки, связанные с аутентификацией.

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

Джаред Хэнсон
источник
9
@EhevuTov> выберите этот ответ, он намного более полный, чем мой, и я на 100% согласен с его наблюдениями.
Пол
1
@ Джаред Хэнсон: У вас есть пример использования паспорта с RESTfull auth?
Наор
5
Я не понимаю, как обещания действительно меняют упомянутые преимущества ванильного стиля обратного вызова. Вы в значительной степени делаете то же самое с меньшим количеством кода в сценариях, где линейная серия событий запускает дополнительные обратные вызовы.
Эрик Реппен
1
Согласитесь с @ErikReppen, что обещания не имеют отношения к этому сравнению.
Vicneanschi
По иронии судьбы, но с паспортом сейчас проблем гораздо больше: github.com/jaredhanson/passport/issues (273 против 148 для всех аутентификаций).
Антон Бессонов
19

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

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

Everyauth

  • долгая история развития, зрелая.
  • больше не поддерживается
  • отличные документы
  • работает с широким спектром услуг
Вэйлон Флинн
источник
1
Everyauth больше не поддерживается.
YasharF 03
1
@YasharF спасибо, что сообщили мне. Ответ обновлен
Уэйлон Флинн
Внимание, паспорт, похоже, тоже больше не поддерживается. Последняя функциональная фиксация была сделана 2 года назад, и есть 300 открытых проблем.
Uri
16

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

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

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

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

Гудлаугур Эгильссон
источник
Спасибо за правдивую историю, хотя последняя капля не ясна.
Andrew_1510
4

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

Павел
источник
Я заметил, что в Passport.js говорится, что он разделяет проблемы, и мне интересно, устроен ли Everyauth аналогичным образом.
EhevuTov
2

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

user1441287
источник
2

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

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

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

machineghost
источник
1

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

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

Харш Сингх
источник