Everyauth và Passport.js?


122

EveryauthPassport.js dường như có bộ tính năng rất giống nhau. Một số so sánh tích cực và tiêu cực giữa hai phép so sánh khiến tôi muốn sử dụng cái này hơn cái kia là gì?


Một giải pháp thay thế khác là sử dụng Grant - đó là chỉ khi bạn đang tìm kiếm phần mềm trung gian OAuth. Nó hỗ trợ hàng trăm nhà cung cấp và được cấu hình thông qua cấu trúc dữ liệu JSON đơn giản.
simo

Câu trả lời:


191

Tham gia với hai xu của tôi, với tư cách là nhà phát triển Passport .

Trước khi phát triển Passport, tôi đã đánh giá everyauth và xác định rằng nó không đáp ứng yêu cầu của tôi. Vì vậy, tôi bắt đầu triển khai một giải pháp khác. Những điểm chính tôi muốn giải quyết là:

Idiomatic Node.js

everyauth sử dụng rộng rãi các lời hứa, thay vì cách tiếp cận của Node là sử dụng các lệnh gọi lại và các lệnh đóng. Hứa hẹn là một cách tiếp cận thay thế cho lập trình không đồng bộ. Mặc dù hữu ích trong một số tình huống cấp cao, nhưng tôi không thấy thoải mái với thư viện xác thực buộc lựa chọn này đối với ứng dụng của mình.

Hơn nữa, tôi thấy rằng việc sử dụng hợp lý các lệnh gọi lại và bao đóng sẽ mang lại mã ngắn gọn, được cấu trúc tốt (gần như kiểu chức năng). Phần lớn sức mạnh của Node xuất phát từ thực tế này và Passport cũng làm theo.

Mô-đun

Passport sử dụng một mô hình thiết kế chiến lược để xác định sự tách biệt rõ ràng các mối quan tâm giữa mô-đun cốt lõi và các cơ chế xác thực khác nhau. Điều này có một số lợi ích, bao gồm kích thước mã tổng thể nhỏ hơn và các giao diện được xác định rõ và có thể kiểm tra được.

Để có hình minh họa cơ bản, hãy so sánh sự khác biệt giữa running $ npm install passport$ npm install everyauth. Passport cho phép bạn tạo đơn đăng ký của mình chỉ bằng các phụ thuộc bạn thực sự cần.

Kiến trúc mô-đun này đã chứng tỏ bản thân có thể thích ứng, tạo điều kiện cho cộng đồng triển khai hỗ trợ cho nhiều cơ chế xác thực, bao gồm OpenID, OAuth, BrowserID, SAML, v.v.

Linh hoạt

Passport chỉ là phần mềm trung gian , sử dụng fn(req, res, next)quy ước được thiết lập bởi Connect và Express.

Điều này có nghĩa là không có gì ngạc nhiên khi bạn xác định nơi bạn muốn các tuyến đường của mình và khi nào bạn muốn sử dụng xác thực. Cũng không có phụ thuộc vào một khuôn khổ cụ thể. Mọi người đang sử dụng thành công Passport với các framework khác như Flatiron

Ngược lại, bất kỳ mô-đun nào trong everyauth đều có thể chèn các tuyến vào ứng dụng của bạn. Điều này có thể làm cho việc gỡ lỗi trở nên khó khăn, vì không rõ ràng một tuyến đường sẽ được gửi như thế nào và dẫn đến việc kết hợp chặt chẽ với một khuôn khổ cụ thể.

Passport cũng gặp lỗi theo cách hoàn toàn thông thường, tiếp theo là phần mềm trung gian xử lý lỗi như được Express định nghĩa.

Ngược lại, everyauth có các quy ước riêng, không phù hợp với không gian vấn đề, gây ra các vấn đề mở lâu dài, chẳng hạn như # 36

Xác thực API

Thành tựu đỉnh cao của bất kỳ thư viện xác thực nào là khả năng xử lý xác thực API một cách thanh lịch như đăng nhập dựa trên web.

Tôi sẽ không giải thích nhiều về điểm này. Tuy nhiên, tôi khuyến khích mọi người xem xét các dự án anh em của Passport, OAuthorizeOAuth2orize . Sử dụng các dự án này, bạn có thể triển khai xác thực "toàn bộ", cho cả ứng dụng web dựa trên HTML / phiên và ứng dụng khách API.

Đáng tin cậy

Cuối cùng, xác thực là một thành phần quan trọng của một ứng dụng và bạn muốn hoàn toàn thoải mái khi dựa vào. everyauth có một danh sách dài các vấn đề, nhiều vấn đề trong số đó vẫn mở và xuất hiện trở lại theo thời gian. Theo ý kiến ​​của tôi, điều này là do phạm vi kiểm tra đơn vị thấp, bản thân nó cho thấy rằng các giao diện nội bộ trong everyauth không được xác định phù hợp.

Ngược lại, giao diện của Passport và các chiến lược của nó được xác định rõ ràng và được bao phủ rộng rãi bởi các bài kiểm tra đơn vị. Các vấn đề liên quan đến Hộ chiếu thường chủ yếu là các yêu cầu về tính năng nhỏ thay vì các lỗi liên quan đến xác thực.

Mặc dù là một dự án trẻ hơn, nhưng mức chất lượng này cho thấy một giải pháp hoàn thiện hơn, dễ bảo trì và tin tưởng hơn trong tương lai.


9
@EhevuTov> chọn câu trả lời này, nó đầy đủ hơn nhiều so với của tôi và tôi đồng ý 100% với quan sát của anh ấy.
Paul

1
@Jared Hanson: Bạn có ví dụ nào về cách sử dụng hộ chiếu với RESTfull auth không?
Naor

5
Tôi không thấy lời hứa thực sự thay đổi lợi ích được trích dẫn của kiểu gọi lại vani như thế nào. Bạn thực hiện khá nhiều điều tương tự với ít mã hơn trong các tình huống trong đó một chuỗi sự kiện tuyến tính kích hoạt các lệnh gọi lại bổ sung.
Erik Reppen

1
Đồng ý với @ErikReppen rằng những lời hứa không liên quan trong so sánh này.
vicneanschi

Trớ trêu thay, hộ chiếu hiện có nhiều vấn đề hơn: github.com/jaredhanson/passport/issues (273 so với 148 cho everyauth).
Anton Bessonov,

19

Hộ chiếu

  • mô-đun và trong suốt
  • tài liệu tốt
  • đóng góp của cộng đồng (do tính mô đun của nó)
  • hoạt động với tất cả mọi người và con chó của họ (một lần nữa, do tính mô đun của nó)

Everyauth

  • lịch sử phát triển lâu dài, trưởng thành.
  • không còn được duy trì
  • tài liệu tuyệt vời
  • hoạt động với nhiều loại dịch vụ

1
Everyauth không còn được duy trì tích cực.
YasharF

1
@YasharF cảm ơn vì đã cho tôi biết. Câu trả lời đã được cập nhật
Waylon Flinn

Lưu ý rằng Hộ chiếu dường như không còn được duy trì nữa. Cam kết chức năng cuối cùng đã được thực hiện cách đây 2 năm và có 300 vấn đề mở.
Uri

16

Vừa hoàn tất việc đổi từ everyauth sang passport. Những lý do sau đây.

  1. Everyauth không đủ ổn định. Cuối cùng là tuần trước, tôi đã gặp phải vấn đề bí ẩn trong đó xác thực facebook sẽ hoạt động trên local.host và trên môi trường sản xuất, nhưng không hoạt động trong môi trường thử nghiệm của tôi trên heroku, ngay cả với mã và cơ sở dữ liệu giống hệt nhau và một phiên bản ứng dụng heroku mới. Tại thời điểm đó, tôi đã cạn kiệt lý thuyết về cách tách biệt vấn đề, vì vậy loại bỏ everyauth là bước tiếp theo hợp lý.
  2. Cách nó cung cấp hỗ trợ xác thực tiêu chuẩn bằng cách sử dụng thông tin đăng nhập tên người dùng / mật khẩu không dễ dàng được tích hợp với cách tiếp cận ứng dụng web một trang.
  3. Tôi không thể yêu cầu everyauth hoạt động với tài khoản Google.
  4. Sự phát triển tích cực của everyauth dường như đang suy giảm.

Quá trình này không gây đau đớn một cách đáng ngạc nhiên, chỉ mất vài giờ, bao gồm cả thử nghiệm thủ công.

Vì vậy, rõ ràng, tôi khuyên bạn nên đi làm hộ chiếu.


Cảm ơn bạn vì câu chuyện có thật mặc dù rơm cuối cùng không rõ ràng.
Andrew_1510

4

Tôi đã dùng thử Everyauth trước và sau đó đã chuyển sang Passport. Nó khiến tôi cảm thấy linh hoạt hơn, đặc biệt. nếu (ví dụ) tôi cần logic khác nhau cho các nhà cung cấp khác nhau. Nó cũng giúp dễ dàng hơn (imo) để định cấu hình các chiến lược xác thực tùy chỉnh. Mặt khác, nó không có trình trợ giúp xem, nếu chúng quan trọng đối với bạn.


Tôi nhận thấy rằng Passport.js nói rằng nó phân chia các mối quan tâm và tôi tự hỏi liệu everyauth có được xây dựng tương tự hay không.
EhevuTov


2

Câu trả lời này hơi muộn, nhưng tôi đã tìm thấy chủ đề này và (sau khi nghe tất cả các phản hồi tiêu cực về Everyauth) đã quyết định sử dụng Passport ... và sau đó ghét nó. Nó không rõ ràng, chỉ hoạt động như phần mềm trung gian (ví dụ: bạn không thể xác thực từ điểm cuối GraphQL) và tôi gặp phải nhiều lỗi khó gỡ lỗi (ví dụ: Làm cách nào để có hai phiên Express? ).

Vì vậy, tôi đã đi tìm và tìm thấy https://github.com/jed/authom . Đối với nhu cầu của tôi, đây là một thư viện tốt hơn nhiều! Nó thấp hơn một chút so với hai thư viện còn lại, vì vậy bạn phải làm những việc như tự đưa người dùng vào phiên ... nhưng đó chỉ là một dòng nên thực sự không có gì to tát.

Quan trọng hơn, thiết kế của nó cho phép bạn kiểm soát nhiều hơn, giúp bạn dễ dàng thực hiện ủy quyền theo cách bạn muốn chứ không phải theo cách Passport dự định. Thêm vào đó, so với Passport, nó đơn giản và dễ học hơn rất nhiều.


1

Lưu ý ngày của bài đăng này, nó sẽ cho biết mức độ liên quan của bài đăng này.

Theo kinh nghiệm của tôi, Everyauth không hoạt động hiệu quả với kiểu đăng nhập bằng mật khẩu. Tôi đang sử dụng express3 và tôi khai báo phần mềm trung gian của mình như vậy app.use(everyauth.middleware(app));và nó vẫn không chuyển trong địa phương everyauth vào mẫu của tôi. Lần cam kết git gần đây nhất là một năm trước và tôi nghĩ rằng các gói mới đã bị hỏng everyauth. Bây giờ tôi sẽ thử hộ chiếu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.