- Auth.js (ชื่อเดิม: NextAuth.js) ตอนนี้ได้รับการดูแลและบำรุงรักษาโดย ทีม Better Auth แล้ว
- Auth.js เป็น ไลบรารีโอเพนซอร์สด้านการยืนยันตัวตน ที่มีการใช้งานแพร่หลายที่สุดในระบบนิเวศ JavaScript และถูกใช้โดยเว็บไซต์ชื่อดังจำนวนมาก
- ก่อนหน้านี้ การสร้างระบบยืนยันตัวตนและการจัดการเซสชันด้วยตนเองเป็นเรื่องยาก และยังมีความไม่สะดวกจากการต้องพัฒนาส่วนพื้นฐานเดิมซ้ำ ๆ ในทุกโปรเจกต์
- เมื่อ ทีม Better Auth มองเห็นข้อจำกัดของ Auth.js และมีวิสัยทัศน์ร่วมกันต่ออนาคต ทั้งสองโปรเจกต์จึงวางแผนรวมกันเพื่อพัฒนาระบบนิเวศให้ก้าวหน้ายิ่งขึ้น
- ผู้ใช้เดิมยังคงได้รับการบำรุงรักษาต่อไป เช่น security patches ส่วนโปรเจกต์ใหม่แนะนำให้ใช้ Better Auth
บทนำและประกาศ
- Auth.js (เดิมรู้จักกันในชื่อ NextAuth.js) ตอนนี้ได้รับการดูแลอย่างเป็นทางการโดย ทีม Better Auth
- Auth.js เป็นหนึ่งใน ไลบรารีโอเพนซอร์สด้านการยืนยันตัวตน ที่เป็นที่รู้จักมากที่สุดในระบบนิเวศ JavaScript และถูกใช้งานอยู่แล้วในหลายบริการ เช่น ChatGPT, Google Labs, Cal.com เป็นต้น
บทบาทเดิมและข้อจำกัดของ Auth.js
- ก่อนจะถูกรวมเข้ากับ Better Auth นั้น Auth.js ช่วยให้นักพัฒนาสามารถมีฟีเจอร์ยืนยันตัวตนได้โดยไม่ต้องเสียเวลานานกับการผสาน OAuth หรือ การจัดการเซสชัน
- อย่างไรก็ตาม เมื่อเว็บแอปพลิเคชันมีความซับซ้อนขึ้นและความต้องการด้านการยืนยันตัวตนมีความหลากหลายมากขึ้น ข้อจำกัดต่าง ๆ เช่น การพัฒนาฟังก์ชันพื้นฐานซ้ำ ๆ หรือการขาดความสามารถในการขยายระบบก็เริ่มเด่นชัดขึ้น
- ทีมเดิมเองก็ตระหนักถึงประเด็นเหล่านี้ แต่ด้วยหลายเหตุผลจึงยังไม่สามารถดำเนินการปรับปรุงเชิงโครงสร้างได้
เบื้องหลังการรวมกับ Better Auth
- เป้าหมายของ Better Auth คือการเสริมความเป็นเจ้าของระบบยืนยันตัวตนในบริการหลากหลายประเภท และวิสัยทัศน์นี้ก็ใกล้เคียงกับทีม Auth.js เช่นกัน
- หลังการหารือภายใน จึงตระหนักได้ว่าการรวมทั้งสองโปรเจกต์เป็นทางเลือกที่ดีที่สุด
- ปัจจุบัน Auth.js มีความสำคัญต่อแอปพลิเคชัน บริษัท และนักพัฒนาจำนวนมาก จึงให้คำมั่นว่าจะดูแลต่อเนื่องทั้ง security patches และการตอบสนองต่อปัญหาเร่งด่วน
คำแนะนำและกลยุทธ์การพัฒนาระบบนิเวศ
- โปรเจกต์ที่ใช้งาน Auth.js (NextAuth.js) อยู่แล้วสามารถใช้งานต่อได้โดยไม่มีปัญหา
- สำหรับโปรเจกต์ใหม่ หากไม่ได้ต้องการฟีเจอร์เฉพาะบางอย่าง (โดยเฉพาะ การจัดการ stateless session โดยไม่ใช้ฐานข้อมูล) แนะนำให้ใช้ Better Auth
- ฟีเจอร์เหล่านี้ก็มีแผนจะถูกเพิ่มเข้าไปในโรดแมปของ Better Auth ด้วยเช่นกัน โดยแทนที่จะพัฒนาซ้ำซ้อน ระบบนิเวศจะถูกรวมเป็นหนึ่งเดียวเพื่อมุ่งไปในทิศทางที่ก้าวหน้ากว่าเดิม
การย้ายระบบและคำขอบคุณต่อชุมชน
- สำหรับทีมที่กำลังพิจารณาการย้ายระบบ จะมีการจัดเตรียม คู่มือ ให้ และมีแผนจะเพิ่มเอกสารและข้อมูลเพิ่มเติมในเร็ว ๆ นี้
- ขอขอบคุณอย่างจริงใจต่อชุมชนและผู้มีส่วนร่วมหลักที่ช่วยพัฒนา Auth.js มาจนถึงวันนี้ (โดยเฉพาะ Balázs, Thang Vu, Nico Domino, Lluis Agusti, Falco Winkler)
- ย้ำว่า จุดเริ่มต้นของ Better Auth มาจาก Auth.js และการรวมกันของทั้งสองโปรเจกต์จะช่วยให้ระบบนิเวศด้านการยืนยันตัวตนก้าวไปได้ไกลยิ่งขึ้น
- เป้าหมายหลักยังคงเดิมคือ “ความเป็นเจ้าของการยืนยันตัวตนเป็นของนักพัฒนาเอง”
5 ความคิดเห็น
ฝั่ง Next.js เปลี่ยนแปลงหนักมากจนรู้สึกเหนื่อยล้าพอสมควร..
ถ้าไม่เสถียรขนาดนี้ แทนที่จะใช้มันไปเลย ผมว่าควรใช้พวกอย่าง clerk ไปก่อน แล้วถ้าผู้ใช้เริ่มเยอะขึ้น ค่อยกลับมาคิดเรื่องระบบยืนยันตัวตนกันแบบจริงจังตอนนั้นน่าจะดีกว่า
เมื่อไม่นานมานี้ผมเพิ่งลองทำอะไรบางอย่างด้วย auth.js ไปเอง แต่แป๊บเดียวก็มีอะไรเปลี่ยนอีกแล้ว ฝั่งเว็บนี่ชวนให้ลำบากใจและเหนื่อยมากจริง ๆ
แล้วผมก็เคยลองส่ง PR เพราะเจอว่ามีทั้งเอกสารและตัวอย่างที่ผิด แต่กลับปิดไปแบบเหมือนไม่มีปัญหาอะไร เลยงงมากเหมือนกัน ดูเหมือนภายในทีมตอนนั้นน่าจะอยู่ในสภาพที่บริหารจัดการกันไม่ค่อยลงตัว
Auth.js ตอนนี้กลายเป็นส่วนหนึ่งของ Better Auth
Better Auth - เฟรมเวิร์ก Auth แบบครบวงจรสำหรับ TypeScript
ความคิดเห็นจาก Hacker News
Better Auth ระดมทุนได้ 5 ล้านดอลลาร์ ทำให้รู้สึกน่าเสียดายที่โปรเจกต์ฟรีล้วน ๆ ถูกดูดเข้าไปอยู่ในกิจการเชิงพาณิชย์
ดู ลำดับการเปลี่ยนแปลง, การสนทนา, ประวัติการเปลี่ยนชื่อ, การออกเบต้า, ประวัติคอมมิต, ประกาศบน X (Twitter)
ได้ยินมาว่า Auth.js ถูกใช้งานจริงใน ChatGPT, Google Labs, Cal.com ฯลฯ แต่ผมไม่เคยเห็นว่า OpenAI ย้ายระบบยืนยันตัวตนออกจาก Auth0 เลย เลยสงสัยว่าเกิดอะไรขึ้นหรือเปล่า
เฟรมเวิร์กนี้ทำให้การจัดการเรื่อง auth ง่ายจนแทบไม่ต้องคิดอะไรเลย ตั้งค่าก็ง่าย และวิธีใช้งานก็สอดคล้องกันในแต่ละเฟรมเวิร์ก ก็ดีใจที่ข้อดีแบบนี้น่าจะยังคงอยู่ต่อไป
ตอนมีคนถามว่า Better Auth ‘ดีกว่า auth.js ไหม?’ ผมแวบแรกก็คิดว่า "ก็ดีกว่า auth.js แหละ" แล้วสุดท้ายมันก็กลายเป็นแบบนั้นจริง ๆ
อยากให้ในภาษา Go มีโซลูชัน auth ที่ใช้ง่ายแบบนี้บ้าง
decent-auth GitHub
ผมเคยใช้ทั้งสองตัวแล้ว และโดยส่วนตัวก็พอใจทั้งคู่ ดีใจที่สองโปรเจกต์นี้ได้มาร่วมมือกัน
ตอนนี้กำลังใช้ Clerk อยู่และดูโอเคดี จะมีข่าวลืออะไรก็ช่าง แต่ผมอยากโฟกัสกับการพัฒนาก่อน
ในฐานะนักพัฒนา ผมรู้สึกว่า Better Auth ดีกว่าเฉย ๆ เพราะมันพาความเรียบง่ายไปสุดทาง
ข่าวนี้ทำให้รู้สึกน่าเสียดาย เพราะมันดูเหมือนว่าการพัฒนาต่อของ Auth.js จะหยุดลงโดยพฤตินัย ผมชอบที่ Auth.js ใช้งานเป็นฟังก์ชันเรียบง่ายและเอาไปใช้หลังบ้านของ GraphQL API ได้ลงตัว แต่ Better Auth มีชนิดข้อมูลที่ต่างกันไปตามแต่ละปลั๊กอิน จนทั่วไปเกินไปคล้าย TypeScript
anyอีกทั้งความรับผิดชอบเรื่องการออกแบบสคีมาฐานข้อมูลและการทำ migration ก็ถูกโยนไปให้ผู้พัฒนาปลั๊กอินด้วย สำหรับไลบรารี auth ผมว่ามันมากเกินไปและไม่ชอบโครงสร้างแบบนี้ ถึงจะทำ adapter เองได้ แต่แม้แต่อินเทอร์เฟซของมันก็ยังทั่วไปเกินไปจนต้องไปทำตัวรันคิวรีแบบ SQL-like ตามอำเภอใจเอง ทำให้เสียอำนาจควบคุมสคีมาโดยตรงไป ส่วน migration ก็รับมาเป็นแค่สตริงของโค้ดแล้วevalเลย ทำให้ควบคุมด้านความปลอดภัยได้ยากก่อนหน้านี้ผมพยายามไม่อคติกับ Better Auth แม้บรรยากาศรอบตัวจะดูโฟกัสที่ความเป็นนักพัฒนาที่เรียนรู้ด้วยตัวเองหรือยังอายุน้อย มากกว่าความแปลกใหม่ทางเทคนิค แต่ดูเหมือนความกังวลแบบนี้ก็ไม่ใช่ว่าจะผิดเสียทีเดียว ถึงอย่างนั้นมันก็ยังดีกว่าการที่ Auth.js ถูกปล่อยทิ้ง และก็สะท้อนให้เห็นว่าสถานะของไลบรารี auth โอเพนซอร์สใน ecosystem ของ JS นั้นน่าเสียดายแค่ไหน
ดู ตัวอย่างการทำ adapter, บทความ TechCrunch ที่แนะนำตัวนักพัฒนา
หลังประกาศ Better Auth ได้เพียง 3 ชั่วโมง ก็ลบประกาศที่เกี่ยวกับ Vercel ออกจาก GitHub commit แล้ว