Everyauth и Passport.js, похоже, имеет очень похожие наборы функций. Каковы некоторые из положительных и отрицательных сравнений между ними, которые заставили бы меня использовать одно вместо другого?
Everyauth против Passport.js?
Ответы (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, как правило, в основном представляют собой незначительные запросы функций, а не ошибки, связанные с аутентификацией.
Несмотря на то, что это более молодой проект, этот уровень качества предполагает более зрелое решение, которое легче поддерживать и которому в будущем будет доверять.
Заграничный пасспорт
- модульный и прозрачный
- хорошие документы
- вклад сообщества (благодаря модульности)
- работает со всеми и их собакой (опять же, благодаря модульности)
Everyauth
- долгая история развития, зрелая.
- больше не поддерживается
- отличные документы
- работает с широким спектром услуг
Только что закончил переход со всех прав на паспорт. Причины были следующие.
- Everyauth недостаточно стабилен. Последней каплей стало то, что на прошлой неделе меня укусила загадочная проблема, когда аутентификация facebook работала на local.host и в производственной среде, но не в моей тестовой среде на heroku, даже с идентичным кодом и базами данных и новым экземпляром приложения heroku. На тот момент у меня закончились теории относительно того, как изолировать проблему, поэтому логическим следующим шагом было удаление всех аутентификаций.
- Способ, которым он обеспечивает поддержку стандартной аутентификации с использованием учетных данных имени пользователя и пароля, нелегко интегрировать с подходом одностраничного веб-приложения.
- Мне не удалось настроить все для работы с учетными записями Google.
- Похоже, что активное развитие Everyauth идет на спад.
Перенос прошел на удивление безболезненно, занял всего несколько часов, включая ручное тестирование.
Поэтому, очевидно, я рекомендую пойти за паспортом.
Сначала я попробовал Everyauth и с тех пор перешел на Passport. Мне он показался несколько более гибким, особенно. если (например) мне нужна разная логика для разных провайдеров. Это также упрощает (imo) настройку пользовательских стратегий аутентификации. С другой стороны, у него нет помощников просмотра, если они важны для вас.
Этот ответ немного запоздал, но я нашел эту ветку и (услышав все отрицательные отзывы о Everyauth) решил использовать Passport ... а затем возненавидел его. Он был непрозрачным, работал только как промежуточное ПО (например, вы не могли пройти аутентификацию из конечной точки GraphQL), и я обнаружил более одной трудной для отладки ошибки (например, Как мне провести два экспресс-сеанса?).
Я пошел искать и нашел https://github.com/jed/authom. Для моих нужд это гораздо лучшая библиотека! Это немного ниже уровня, чем две другие библиотеки, поэтому вам нужно делать такие вещи, как вводить пользователя в сеанс самостоятельно ... но это только одна строка, так что это действительно не имеет большого значения.
Что еще более важно, его дизайн дает вам гораздо больше контроля, упрощая реализацию вашей авторизации так, как вы хотите, а не так, как предполагал Passport. Кроме того, по сравнению с Passport он намного проще и легче в освоении.
Раньше я использовал Everyauth, более конкретно, mongoose-auth. Мне было трудно правильно разделить мои файлы без демонтажа модуля everyauth. На мой взгляд, паспорт - более чистый метод создания логинов. Есть запись, которую я нашел очень полезной http://rckbt.me/2012/03/transitioning-from-mongoose-auth-to-passport/
Обратите внимание на дату публикации, она покажет, насколько актуален этот пост.
По моему опыту, Everyauth не работает из коробки с паролем для входа в систему. Я использую express3, и я объявляю свое промежуточное ПО таким образом app.use(everyauth.middleware(app));
, но оно все еще не передается в каждый локальный идентификатор моего шаблона. Последний коммит git был год назад, и я полагаю, что новые пакеты нарушили все аутентификации. Сейчас попробую паспорт.