เลือกใช้ Laravel Authentication packages ตัวไหนดี?
Published on May 01, 2026
3 min read
ทุกครั้งที่เริ่มโปรเจกต์ Laravel ใหม่ มันก็จะมีคำถามเดิมๆ วนมาเสมอว่า "จะทำ auth ด้วยตัวไหนดีวะ?"
ครั้งแรกๆ ผมก็แค่ลองตามบทความที่เจอ แต่พอทำงานมาสักพักถึงได้รู้ว่าแต่ละตัวมันมีจุดประสงค์ต่างกันชัดเจนมาก เลือกผิดตัวแล้วแก้ทีหลังมันเสียเวลามาก จึงจดเอาไว้ให้ตัวเองกลับมาอ่านได้เรื่อยๆ เดิมทีจดไว้ใน notion ส่วนตัว เอามาเรียบเรียงใหม่และแบ่งปันน่าจะดีกว่า
Breeze สำหรับ login/register พื้นฐาน
ถ้าโปรเจกต์เป็นเว็บทั่วไป ต้องการแค่ login, register, reset password Breeze คือตัวที่ใช่เลย
มันเบา ติดตั้งง่าย และ generate views ออกมาให้พร้อมใช้ ซึ่งเป็น Blade ธรรมดา แก้ง่าย ไม่ซับซ้อน ถ้าชอบ Inertia ก็มี stack ให้เลือกด้วย
composer require laravel/breeze --dev
php artisan breeze:install
npm install && npm run dev
php artisan migrate
ผมใช้ Breeze เป็น default สำหรับโปรเจกต์เว็บทั่วไปที่ไม่ได้มีความซับซ้อนด้านสิทธิ์หรือ team management
Jetstream ถ้าต้องการ team + permission ในตัว
Jetstream เหมือน Breeze แต่ขยายออกมาอีกหลายชั้น มีทั้ง team management, role/permission, two-factor auth, session management และยังมี profile photo ให้ด้วย
รองรับสอง frontend stack:
- Livewire ถ้าชอบ server-side rendering
- Inertia.js ถ้าทำเป็น SPA กับ Vue หรือ React
ข้อเสียของ Jetstream คือมันหนักและ opinionated มาก ถ้าโปรเจกต์ไม่ได้ต้องการฟีเจอร์พวกนี้ทั้งหมด มันจะรู้สึก overkill ไปหน่อย ผมเลยใช้มันเฉพาะโปรเจกต์ที่ client ต้องการ team management จริงๆ เท่านั้น
Sanctum สำหรับ SPA หรือ Mobile API
ถ้าทำ API ที่จะถูกเรียกจาก frontend แยก (เช่น Next.js, React) หรือ mobile app Sanctum คือคำตอบ
Sanctum ออก API token ให้ user แล้วใช้ token นั้น authenticate request มันเบาและตรงไปตรงมา
// ออก token ให้ user
$token = $user->createToken('app-token')->plainTextToken;
// ใช้ middleware ป้องกัน route
Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
return $request->user();
});
สำหรับ SPA ที่อยู่ domain เดียวกัน Sanctum ยังรองรับ cookie-based auth ด้วย ซึ่งปลอดภัยกว่าการเก็บ token ใน localStorage
Passport OAuth2 เต็มรูปแบบ
ถ้าโปรเจกต์ต้องการเปิด API ให้ third-party เข้าถึง แบบที่ต้องมี authorization flow เหมือน "Login with Google" Passport คือตัวเดียวที่ทำได้ใน Laravel
Passport implement OAuth2 เต็มๆ มีทั้ง authorization code, client credentials, password grant ฯลฯ
ข้อเสียคือมันซับซ้อนและหนักกว่า Sanctum เยอะ ถ้าไม่ได้ต้องการ OAuth2 จริงๆ ผมแนะนำให้ใช้ Sanctum แทนดีกว่า
Fortify backend-only, ไม่มี UI
Fortify คือ authentication backend ที่ไม่มี view มาให้เลย มันแค่ handle logic เรื่อง login, register, password reset, two-factor auth ให้
ใช้ตอนที่อยากควบคุม frontend เองทั้งหมด หรือทำ headless auth ที่ frontend จะ call API เข้ามาเอง จริงๆ Jetstream ข้างในก็ใช้ Fortify อยู่
Socialite Social Login
ถ้าต้องการ "Login with Google / GitHub / Facebook" Socialite จัดการให้หมด
composer require laravel/socialite
// Redirect ไปที่ Google
Route::get('/auth/google', function () {
return Socialite::driver('google')->redirect();
});
// Callback รับข้อมูล user กลับมา
Route::get('/auth/google/callback', function () {
$user = Socialite::driver('google')->user();
// $user->email, $user->name, $user->avatar
});
ใช้งานง่ายมาก รองรับ provider เยอะ ทั้ง Google, GitHub, Facebook, Twitter และยังมี third-party driver อีกเพียบ
สรุป
| สถานการณ์ | ใช้ตัวไหน |
|---|---|
| เว็บทั่วไป มีแค่ login/register | Breeze |
| เว็บที่ต้องการ team/role management | Jetstream |
| SPA หรือ Mobile API | Sanctum |
| เปิด API ให้ third-party (OAuth2) | Passport |
| ต้องการ auth backend แต่ไม่เอา UI | Fortify |
| Social login (Google, GitHub ฯลฯ) | Socialite |
สิ่งที่ผมเรียนรู้คือ ไม่ต้องไปใช้ตัวที่ใหญ่ที่สุดเสมอ เลือกให้ตรงกับสิ่งที่โปรเจกต์ต้องการจริงๆ ดีกว่า
อ้างอิง
ตั้ม — ศิริชัย ธีรภัทรสกุล
นักพัฒนาเว็บฟรีแลนซ์ตั้งแต่ปี 2547 รับพัฒนาเว็บไซต์ ระบบจัดการธุรกิจ และงาน Outsource / Sub-contract (WFH 100%)