Everyauth vs Passport.js?

122

Everyauth dan Passport.js tampaknya memiliki set fitur yang sangat mirip. Apa saja perbandingan positif dan negatif antara keduanya yang membuat saya ingin menggunakan salah satunya?

EhevuTov
sumber
Alternatif lain adalah menggunakan Grant - itu hanya jika Anda mencari middleware OAuth. Ini mendukung ratusan penyedia dan dikonfigurasi melalui struktur data JSON langsung.
simo

Jawaban:

191

Berpadu dengan dua sen saya, sebagai pengembang Passport .

Sebelum mengembangkan Paspor, saya mengevaluasi semua kebenaran dan memutuskan bahwa itu tidak memenuhi persyaratan saya. Jadi, saya mulai menerapkan solusi berbeda yang mana. Poin utama yang ingin saya bahas adalah:

Node.js Idiomatik

everyauth memanfaatkan janji secara ekstensif, bukan pendekatan Node yang menggunakan callback dan penutupan. Janji adalah pendekatan alternatif untuk pemrograman async. Meskipun berguna dalam beberapa situasi tingkat tinggi, saya tidak nyaman dengan pustaka otentikasi yang memaksa pilihan ini pada aplikasi saya.

Selain itu, saya menemukan bahwa penggunaan callback dan closure yang tepat menghasilkan kode yang ringkas dan dirancang dengan baik (gaya hampir fungsional). Sebagian besar kekuatan Node sendiri berasal dari fakta ini, dan Paspor mengikutinya.

Modular

Paspor menggunakan pola desain strategi untuk menentukan pemisahan yang jelas dari perhatian antara modul inti dan berbagai mekanisme otentikasi. Ini memiliki sejumlah manfaat, termasuk ukuran kode keseluruhan yang lebih kecil dan antarmuka yang terdefinisi dengan baik serta dapat diuji.

Untuk ilustrasi dasar, bandingkan perbedaan antara berlari $ npm install passportdan $ npm install everyauth. Passport memungkinkan Anda membuat aplikasi hanya dengan menggunakan dependensi yang benar-benar Anda butuhkan.

Arsitektur modular ini telah terbukti dapat beradaptasi, memfasilitasi komunitas yang telah menerapkan dukungan untuk berbagai mekanisme autentikasi, termasuk OpenID, OAuth, BrowserID, SAML, dll.

Fleksibel

Paspor hanyalah middleware , menggunakan fn(req, res, next)konvensi yang ditetapkan oleh Connect dan Express.

Ini berarti tidak ada kejutan , saat Anda menentukan di mana Anda ingin rute Anda dan kapan Anda ingin menggunakan otentikasi. Juga tidak ada ketergantungan pada kerangka kerja tertentu. Orang-orang berhasil menggunakan Paspor dengan kerangka kerja lain seperti Flatiron

Sebaliknya, modul apa pun di everyauth dapat memasukkan rute ke dalam aplikasi Anda. Hal ini dapat membuat proses debug menjadi sulit, karena tidak jelas bagaimana rute akan dikirim dan mengarah ke hubungan yang erat dengan kerangka kerja tertentu.

Paspor juga mengalami kesalahan dengan cara yang sepenuhnya konvensional, di samping middleware penanganan kesalahan seperti yang didefinisikan oleh Express.

Sebaliknya, everyauth memiliki konvensi sendiri, yang tidak sesuai dengan ruang masalah dengan baik, menyebabkan masalah terbuka yang sudah berlangsung lama seperti # 36

Otentikasi API

Pencapaian puncak dari setiap pustaka otentikasi adalah kemampuannya untuk menangani otentikasi API seanggun masuk berbasis web.

Saya tidak akan menjelaskan banyak tentang hal ini. Namun, saya mendorong orang untuk melihat proyek saudara Passport, OAuthorize dan OAuth2orize . Dengan menggunakan proyek ini, Anda dapat menerapkan autentikasi "tumpukan penuh", untuk aplikasi web berbasis sesi / HTML dan klien API.

Andal

Terakhir, otentikasi adalah komponen penting dari sebuah aplikasi, dan yang Anda ingin andalkan sepenuhnya. everyauth memiliki daftar panjang masalah yang banyak di antaranya tetap terbuka dan muncul kembali seiring waktu. Menurut pendapat saya, ini karena cakupan pengujian unit yang rendah, yang dengan sendirinya menunjukkan bahwa antarmuka internal di everyauth tidak didefinisikan dengan tepat.

Sebaliknya, antarmuka Passport dan strateginya didefinisikan dengan baik dan secara ekstensif dicakup oleh pengujian unit. Masalah yang diajukan terhadap Paspor cenderung sebagian besar merupakan permintaan fitur kecil, daripada bug yang berkaitan dengan otentikasi.

Meskipun merupakan proyek yang lebih muda, tingkat kualitas ini menunjukkan solusi yang lebih matang yang lebih mudah dipertahankan dan dipercaya di masa mendatang.

Jared Hanson
sumber
9
@EhevuTov> pilih jawaban ini, ini jauh lebih lengkap dari milik saya dan saya setuju 100% dengan pengamatannya.
Paul
1
@ Jared Hanson: Apakah Anda memiliki contoh bagaimana menggunakan paspor dengan autentikasi RESTfull?
Naor
5
Saya tidak melihat bagaimana promise benar-benar mengubah manfaat yang dikutip dari gaya panggilan balik vanilla. Anda cukup banyak melakukan hal yang sama dengan lebih sedikit kode dalam skenario di mana rangkaian peristiwa linier memicu callback tambahan.
Erik Reppen
1
Setuju dengan @ErikReppen bahwa janji tidak relevan dalam perbandingan ini.
vicneanschi
Ironisnya, tetapi paspor memiliki lebih banyak masalah sekarang: github.com/jaredhanson/passport/issues (273 vs. 148 untuk everyauth).
Anton Bessonov
19

Paspor

  • modular dan transparan
  • dokumen bagus
  • kontribusi komunitas (karena modularitasnya)
  • bekerja dengan semua orang dan anjing mereka (sekali lagi, karena modularitasnya)

Everyauth

  • sejarah perkembangan yang panjang, dewasa.
  • tidak lagi dipertahankan
  • dokumen yang bagus
  • bekerja dengan berbagai layanan
Waylon Flinn
sumber
1
Everyauth tidak lagi aktif dipertahankan.
YasharF
1
@YasharF terima kasih telah memberi tahu saya. Jawaban telah diperbarui
Waylon Flinn
Perlu diketahui bahwa Paspor sepertinya tidak lagi dipertahankan. Komitmen fungsional terakhir dibuat 2 tahun lalu dan ada 300 masalah terbuka.
Uri
16

Baru saja selesai berganti dari everyauth ke paspor. Alasannya adalah sebagai berikut.

  1. Everyauth tidak cukup stabil. Yang terakhir adalah minggu lalu saya digigit oleh masalah misterius di mana otentikasi facebook akan berfungsi di local.host dan di lingkungan produksi, tetapi tidak di lingkungan pengujian saya di heroku, bahkan dengan kode dan database yang identik dan contoh aplikasi heroku baru. Pada saat itu saya kehabisan teori tentang bagaimana mengisolasi masalah, jadi menghapus semua kebenaran adalah langkah logis berikutnya.
  2. Cara menyediakan dukungan untuk otentikasi standar menggunakan kredensial nama pengguna / kata sandi tidak mudah diintegrasikan dengan pendekatan aplikasi web satu halaman.
  3. Saya tidak bisa mendapatkan kebenaran untuk bekerja dengan akun Google.
  4. Perkembangan aktif everyauth tampaknya menurun.

Portanya ternyata tidak menimbulkan rasa sakit, hanya membutuhkan beberapa jam, termasuk pengujian manual.

Jadi jelas, saya sarankan pergi untuk paspor.

Gudlaugur Egilsson
sumber
Terima kasih atas kisah nyata meskipun hasil akhirnya tidak jelas.
Andrew_1510
4

Saya mencoba Everyauth terlebih dahulu dan sejak itu pergi ke Passport. Menurut saya, hal itu agak lebih fleksibel, khususnya. jika (misalnya) saya memerlukan logika yang berbeda untuk penyedia yang berbeda. Ini juga mempermudah (imo) untuk mengonfigurasi strategi autentikasi kustom. Di sisi lain, ia tidak memiliki view helers, jika itu penting bagi Anda.

Paul
sumber
Saya perhatikan bahwa Passport.js mengatakan itu membagi kekhawatiran dan saya bertanya-tanya apakah everyauth dibangun dengan cara yang sama.
EhevuTov
2

Jawaban ini agak terlambat, tetapi saya menemukan utas ini dan (setelah mendengar semua tanggapan negatif tentang Everyauth) memutuskan untuk menggunakan Paspor ... dan kemudian membencinya. Itu buram, hanya bekerja sebagai middleware (Anda tidak dapat mengotentikasi dari titik akhir GraphQL, misalnya), dan saya mengalami lebih dari satu bug yang sulit untuk di-debug (misalnya. Bagaimana saya memiliki dua sesi Express? ).

Jadi saya pergi mencari dan menemukan https://github.com/jed/authom . Untuk kebutuhan saya, ini adalah perpustakaan yang jauh lebih baik! Ini sedikit lebih rendah daripada dua pustaka lainnya, jadi Anda harus melakukan hal-hal seperti menempatkan pengguna ke dalam sesi sendiri ... tapi itu hanya satu baris jadi ini bukan masalah besar.

Lebih penting lagi desainnya memberi Anda lebih banyak kendali, membuatnya mudah untuk mengimplementasikan otorisasi Anda seperti yang Anda inginkan dan bukan seperti yang diinginkan oleh Passport. Ditambah lagi, dibandingkan dengan Passport, ini jauh lebih sederhana dan lebih mudah dipelajari.

machineghost
sumber
1

Catat tanggal posting ini, itu akan menunjukkan seberapa relevan posting ini.

Dalam pengalaman saya, Everyauth tidak bekerja di luar kotak dengan gaya login kata sandinya. Saya menggunakan express3 dan mendeklarasikan middleware saya seperti itu app.use(everyauth.middleware(app));dan masih tidak meneruskan everyauth lokal ke template saya. Git commit terakhir adalah setahun yang lalu dan saya pikir paket baru telah rusak selamanya. Sekarang saya akan mencoba paspor.

Harsh Singh
sumber