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