Development

JWT Authentication คืออะไร? คู่มือระบบ Login ด้วย JWT ใน Laravel และ Next.js สำหรับนักพัฒนา SME ปี 2026

เรียนรู้ JWT Authentication คืออะไร วิธีสร้างระบบ Login ที่ปลอดภัยด้วย JSON Web Token ใน Laravel Sanctum และ Next.js พร้อม Best Practices สำหรับนักพัฒนา SME ไทยปี 2026

AF
ADS FIT Team
·7 นาที
Share:
JWT Authentication คืออะไร? คู่มือระบบ Login ด้วย JWT ใน Laravel และ Next.js สำหรับนักพัฒนา SME ปี 2026

# JWT Authentication คืออะไร? คู่มือระบบ Login ด้วย JWT ใน Laravel และ Next.js สำหรับนักพัฒนา SME ปี 2026

ระบบ Authentication (การยืนยันตัวตน) เป็นพื้นฐานที่สำคัญที่สุดของทุกแอปพลิเคชันธุรกิจ ไม่ว่าจะเป็นระบบ CRM, E-commerce หรือ Internal Tool แต่นักพัฒนาหลายคนยังสับสนว่าควรใช้ Session-based Authentication หรือ JWT (JSON Web Token) และจะ Implement ยังไงให้ถูกต้อง

ปัญหาที่พบบ่อยในโปรเจกต์ Laravel + Next.js คือการจัดการ Authentication ระหว่าง Frontend และ Backend ที่อยู่คนละ Domain โดยเฉพาะเมื่อต้องรองรับ Mobile App หรือ Third-party Integration ด้วย

บทความนี้จะอธิบาย JWT คืออะไร, ทำงานอย่างไร, ข้อดีข้อเสียเมื่อเทียบกับ Session, และวิธี Implement ระบบ JWT Authentication อย่างถูกต้องด้วย Laravel Sanctum และ Next.js

JWT คืออะไร?

JWT (JSON Web Token) คือ Open Standard (RFC 7519) สำหรับการส่งข้อมูลระหว่าง Client และ Server อย่างปลอดภัย โดยข้อมูลถูก Encode เป็น JSON Object และลงลายมือชื่อ (Sign) ด้วย Secret Key หรือ RSA Key

JWT ประกอบด้วย 3 ส่วน คั่นด้วยจุด (.) ดังนี้:

  • **Header** — ระบุประเภทของ Token และ Algorithm ที่ใช้ เช่น `{"alg":"HS256","typ":"JWT"}`
  • **Payload** — ข้อมูลที่ต้องการส่ง เช่น User ID, Role, Expiry Time
  • **Signature** — ลายเซ็นดิจิทัลเพื่อยืนยันความถูกต้อง
  • ตัวอย่าง JWT: `eyJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOjEsInJvbGUiOiJhZG1pbiJ9.signature`

    Session vs JWT: เลือกอะไรดี?

    | เกณฑ์ | Session Authentication | JWT Authentication |

    |-------|----------------------|-------------------|

    | เก็บข้อมูลที่ | Server (Database/Redis) | Client (Cookie/LocalStorage) |

    | Scalability | ต้องแชร์ Session Store | Stateless รองรับ Scale ง่าย |

    | เพิกถอน (Revoke) | ทำได้ทันที | ต้องใช้ Blacklist/Short Expiry |

    | เหมาะกับ | Web App แบบ Traditional | API, Mobile App, Microservices |

    | ความปลอดภัย | ดีกว่าถ้า Config ถูก | ดีถ้าเก็บใน HttpOnly Cookie |

    สรุป: ถ้าเป็น Laravel + Next.js แนะนำให้ใช้ Laravel Sanctum ซึ่งรองรับทั้ง Session (สำหรับ Web) และ API Token (สำหรับ Mobile/SPA) ในชุดเดียว

    วิธีสร้าง JWT Authentication ด้วย Laravel Sanctum

    ขั้นตอนที่ 1: ติดตั้ง Sanctum

    ```bash

    composer require laravel/sanctum

    php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"

    php artisan migrate

    ```

    ขั้นตอนที่ 2: เพิ่ม HasApiTokens ใน User Model

    ```php

    use Laravel\Sanctum\HasApiTokens;

    class User extends Authenticatable

    {

    use HasApiTokens, HasFactory, Notifiable;

    }

    ```

    ขั้นตอนที่ 3: สร้าง Auth Controller

    ```php

    class AuthController extends Controller

    {

    public function login(Request $request)

    {

    $request->validate([

    'email' => 'required|email',

    'password' => 'required',

    ]);

    if (!Auth::attempt($request->only('email', 'password'))) {

    return response()->json(['message' => 'Invalid credentials'], 401);

    }

    $user = Auth::user();

    $token = $user->createToken('auth-token')->plainTextToken;

    return response()->json([

    'token' => $token,

    'user' => $user,

    ]);

    }

    public function logout(Request $request)

    {

    $request->user()->currentAccessToken()->delete();

    return response()->json(['message' => 'Logged out successfully']);

    }

    }

    ```

    ขั้นตอนที่ 4: เพิ่ม Routes

    ```php

    Route::post('/login', [AuthController::class, 'login']);

    Route::middleware('auth:sanctum')->group(function () {

    Route::post('/logout', [AuthController::class, 'logout']);

    Route::get('/user', fn(Request $r) => $r->user());

    });

    ```

    วิธีใช้ JWT Token ใน Next.js

    ขั้นตอนที่ 5: Login จาก Next.js

    ```typescript

    // lib/auth.ts

    export async function loginUser(email: string, password: string) {

    const response = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/login`, {

    method: 'POST',

    headers: { 'Content-Type': 'application/json' },

    body: JSON.stringify({ email, password }),

    });

    if (!response.ok) throw new Error('Login failed');

    const data = await response.json();

    return data;

    }

    ```

    ขั้นตอนที่ 6: ป้องกัน Routes ด้วย Middleware

    ```typescript

    // middleware.ts

    import { NextResponse } from 'next/server';

    import type { NextRequest } from 'next/server';

    export function middleware(request: NextRequest) {

    const token = request.cookies.get('auth-token');

    if (!token && request.nextUrl.pathname.startsWith('/dashboard')) {

    return NextResponse.redirect(new URL('/login', request.url));

    }

    return NextResponse.next();

    }

    export const config = {

    matcher: ['/dashboard/:path*', '/admin/:path*'],

    };

    ```

    Best Practices ความปลอดภัย JWT

    ความปลอดภัยของระบบ JWT ขึ้นอยู่กับการ Implement ที่ถูกต้อง สิ่งที่ควรทำและไม่ควรทำ:

  • **ควรเก็บ Token ใน HttpOnly Cookie** ไม่ใช่ LocalStorage เพื่อป้องกัน XSS Attack
  • **ตั้ง Expiry Time สั้น** เช่น 15 นาที พร้อม Refresh Token สำหรับต่ออายุ
  • **ใช้ HTTPS เสมอ** เพื่อป้องกัน Token ถูก Intercept
  • **Validate ทุก Request บน Server** อย่าเชื่อข้อมูลใน Payload โดยไม่ Verify Signature
  • **ตั้ง CORS ให้ถูกต้อง** ใน Laravel ระบุ Allowed Origins ให้ชัดเจน
  • เปรียบเทียบ Authentication Libraries สำหรับ Next.js

    | Library | ความง่าย | JWT Support | Provider Support | เหมาะกับ |

    |---------|---------|-------------|-----------------|---------|

    | Laravel Sanctum (API) | ★★★★★ | ✓ | — | Laravel Backend |

    | NextAuth.js | ★★★★ | ✓ | Google, GitHub | Full-stack Next.js |

    | Auth.js v5 | ★★★ | ✓ | 50+ Providers | Enterprise |

    | Supabase Auth | ★★★★★ | ✓ | Google, Facebook | Supabase Backend |

    สรุปและก้าวต่อไป

    JWT Authentication เป็นมาตรฐานที่ควรรู้สำหรับนักพัฒนา Full-stack ทุกคน โดยเฉพาะถ้าทำงานกับ Laravel + Next.js การใช้ Laravel Sanctum เป็นตัวเลือกที่ดีที่สุดเพราะรองรับทั้ง Web และ API ในชุดเดียว

    Checklist ก่อน Deploy:

  • ตรวจสอบว่า Token เก็บใน HttpOnly Cookie ไม่ใช่ LocalStorage
  • ตั้ง Token Expiry และระบบ Refresh Token
  • เปิด HTTPS บน Production Server
  • ทดสอบ CORS ระหว่าง Frontend และ Backend
  • เพิ่ม Rate Limiting บน Login Endpoint
  • ต้องการให้ ADS FIT ช่วยออกแบบระบบ Authentication ที่ปลอดภัยสำหรับโปรเจกต์ของคุณ? ติดต่อเราวันนี้ ทีม Developer ของเราพร้อมช่วยคุณสร้างระบบที่ปลอดภัย เสถียร และ Scale ได้

    Tags

    #JWT#authentication#Laravel Sanctum#Next.js#API security#login

    สนใจโซลูชันนี้?

    ปรึกษาทีม ADS FIT ฟรี เราพร้อมออกแบบระบบที่ฟิตกับธุรกิจของคุณ

    ติดต่อเรา →

    บทความที่เกี่ยวข้อง