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?
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?
Jawaban:
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 passport
dan $ 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.
Baru saja selesai berganti dari everyauth ke paspor. Alasannya adalah sebagai berikut.
Portanya ternyata tidak menimbulkan rasa sakit, hanya membutuhkan beberapa jam, termasuk pengujian manual.
Jadi jelas, saya sarankan pergi untuk paspor.
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.
Saya biasa menggunakan Everyauth lebih khusus lagi mongoose-auth. Saya merasa sulit untuk membagi file saya dengan benar tanpa membongkar modul everyauth. Paspor menurut saya adalah metode yang lebih bersih untuk membuat login. Ada tulisan yang menurut saya sangat membantu http://rckbt.me/2012/03/transitioning-from-mongoose-auth-to-passport/
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.
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.