EveryauthและPassport.jsดูเหมือนจะมีชุดคุณลักษณะที่คล้ายกันมาก อะไรคือการเปรียบเทียบเชิงบวกและเชิงลบระหว่างสองสิ่งที่ทำให้ฉันอยากใช้อีกแบบหนึ่ง
EveryauthและPassport.jsดูเหมือนจะมีชุดคุณลักษณะที่คล้ายกันมาก อะไรคือการเปรียบเทียบเชิงบวกและเชิงลบระหว่างสองสิ่งที่ทำให้ฉันอยากใช้อีกแบบหนึ่ง
คำตอบ:
ตีระฆังด้วยสองเซ็นต์ของฉันเป็นนักพัฒนาของหนังสือเดินทาง
ก่อนที่จะพัฒนา Passport ฉันได้ประเมินทุกครั้งและพิจารณาแล้วว่าไม่ตรงตามข้อกำหนดของฉัน ดังนั้นฉันจึงตั้งค่าเกี่ยวกับการใช้โซลูชันอื่นซึ่งจะ ประเด็นสำคัญที่ฉันต้องการกล่าวคือ:
Idiomatic Node.js
everyauth ใช้คำสัญญาอย่างกว้างขวางแทนที่จะใช้แนวทางของ Node ในการใช้การโทรกลับและการปิด คำสัญญาเป็นอีกทางเลือกหนึ่งในการเขียนโปรแกรม async แม้ว่าจะมีประโยชน์ในบางสถานการณ์ระดับสูง แต่ฉันไม่สะดวกใจที่ไลบรารีการตรวจสอบสิทธิ์บังคับให้ใช้ตัวเลือกนี้กับแอปพลิเคชันของฉัน
นอกจากนี้ฉันพบว่าการใช้การโทรกลับและการปิดอย่างเหมาะสมจะให้รหัสที่กระชับและได้รับการออกแบบมาอย่างดี (รูปแบบที่ใช้งานได้เกือบ) พลังส่วนใหญ่ของ Node นั้นมาจากข้อเท็จจริงนี้และ Passport ก็เป็นไปตามความเหมาะสม
modular
หนังสือเดินทางใช้รูปแบบการออกแบบกลยุทธ์เพื่อกำหนดการแยกข้อกังวลที่ชัดเจนระหว่างโมดูลหลักและกลไกการตรวจสอบสิทธิ์ต่างๆ สิ่งนี้มีประโยชน์หลายประการรวมถึงขนาดโค้ดโดยรวมที่เล็กลงและอินเทอร์เฟซที่กำหนดไว้อย่างดีและทดสอบได้
สำหรับภาพประกอบพื้นฐานการเปรียบเทียบความแตกต่างระหว่างการเรียกใช้และ$ npm install passport
$ npm install everyauth
หนังสือเดินทางช่วยให้คุณสร้างแอปพลิเคชันของคุณโดยใช้เฉพาะการอ้างอิงที่คุณต้องการเท่านั้น
สถาปัตยกรรมแบบแยกส่วนนี้ได้พิสูจน์แล้วว่าสามารถปรับเปลี่ยนได้ช่วยอำนวยความสะดวกให้กับชุมชนที่ใช้การสนับสนุนสำหรับกลไกการตรวจสอบสิทธิ์ที่หลากหลายรวมถึง OpenID, OAuth, BrowserID, SAML และอื่น ๆ
คล่องตัว
หนังสือเดินทางเป็นเพียงมิดเดิลแวร์โดยใช้fn(req, res, next)
อนุสัญญาที่ Connect and Express กำหนดขึ้น
ซึ่งหมายความว่าไม่มีเรื่องน่าประหลาดใจใดๆ เนื่องจากคุณกำหนดตำแหน่งที่คุณต้องการเส้นทางและเวลาที่คุณต้องการใช้การตรวจสอบสิทธิ์ นอกจากนี้ยังไม่มีการอ้างอิงในกรอบงานเฉพาะ ผู้คนประสบความสำเร็จในการใช้ Passport กับเฟรมเวิร์กอื่น ๆ เช่นFlatiron
ในทางตรงกันข้ามโมดูลใด ๆ ใน everyauth สามารถแทรกเส้นทางลงในแอปพลิเคชันของคุณได้ สิ่งนี้สามารถทำให้การดีบักทำได้ยากเนื่องจากไม่ชัดเจนว่าจะส่งเส้นทางอย่างไรและนำไปสู่การเชื่อมต่อที่แน่นหนากับเฟรมเวิร์กเฉพาะ
หนังสือเดินทางยังมีข้อผิดพลาดในลักษณะที่เป็นแบบแผนโดยสิ้นเชิงซึ่งเป็นสิ่งที่อยู่ถัดไปจากมิดเดิลแวร์จัดการข้อผิดพลาดตามที่กำหนดโดย Express
ในทางตรงกันข้าม everyauth มีอนุสัญญาของตัวเองซึ่งไม่พอดีกับพื้นที่ของปัญหาทำให้เกิดปัญหาที่เปิดมายาวนานเช่น# 36
การตรวจสอบสิทธิ์ API
ความสำเร็จสูงสุดของไลบรารีการตรวจสอบความถูกต้องคือความสามารถในการจัดการการตรวจสอบสิทธิ์ API ได้อย่างสวยงามเช่นเดียวกับการลงชื่อบนเว็บ
ฉันจะไม่อธิบายรายละเอียดในประเด็นนี้มากนัก แต่ผมขอแนะนำให้คนที่จะมองเข้าไปในโครงการพี่น้องหนังสือเดินทางของOAuthorizeและOAuth2orize เมื่อใช้โปรเจ็กต์เหล่านี้คุณสามารถใช้การตรวจสอบสิทธิ์แบบ "เต็มสแต็ก" สำหรับทั้งเว็บแอปที่ใช้ HTML / เซสชันและไคลเอ็นต์ API
น่าเชื่อถือ
สุดท้ายการพิสูจน์ตัวตนเป็นองค์ประกอบที่สำคัญของแอปพลิเคชันและเป็นสิ่งที่คุณต้องการวางใจได้อย่างเต็มที่ everyauth มีรายการปัญหามากมายซึ่งหลายประเด็นยังคงเปิดอยู่และเกิดขึ้นอีกครั้งเมื่อเวลาผ่านไป ในความคิดของฉันนี่เป็นเพราะความครอบคลุมของการทดสอบหน่วยต่ำซึ่งแสดงให้เห็นว่าอินเทอร์เฟซภายในในทุก ๆ ส่วนไม่ได้กำหนดไว้อย่างเหมาะสม
ในทางตรงกันข้ามอินเทอร์เฟซและกลยุทธ์ของ Passport ได้รับการกำหนดไว้อย่างดีและครอบคลุมโดยการทดสอบหน่วย ปัญหาที่ยื่นต่อ Passport ส่วนใหญ่มักจะเป็นคำขอคุณลักษณะเล็กน้อยมากกว่าข้อบกพร่องเกี่ยวกับการตรวจสอบสิทธิ์
แม้จะเป็นโครงการที่อายุน้อยกว่า แต่คุณภาพระดับนี้ก็แนะนำวิธีแก้ปัญหาที่เป็นผู้ใหญ่มากขึ้นซึ่งง่ายต่อการดูแลรักษาและไว้วางใจในอนาคต
เพิ่งเปลี่ยนจาก everyauth เป็นพาสปอร์ตเสร็จ สาเหตุมีดังต่อไปนี้
พอร์ตนั้นไม่เจ็บปวดอย่างน่าประหลาดใจโดยใช้เวลาเพียงไม่กี่ชั่วโมงรวมถึงการทดสอบด้วยตนเอง
เห็นได้ชัดว่าฉันแนะนำให้ไปทำหนังสือเดินทาง
ฉันลองใช้ 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));
และมันก็ยังไม่ได้ส่งผ่านไปยังเทมเพลตของฉัน คอมมิตคอมครั้งสุดท้ายคือปีที่แล้วและฉันคิดว่าแพ็คเกจใหม่ ๆ พังทุกอย่าง ตอนนี้กำลังจะลองพาสปอร์ต