0Pricing
React Academy · บทเรียน

การตั้งค่า Auth.js ใน Next.js App Router

ติดตั้ง Auth.js กำหนดค่าตัวจัดการเส้นทาง และเพิ่มผู้ให้บริการ OAuth ของ GitHub

การตั้งค่า Auth.js ใน Next.js App Router เป็นบทเรียน React Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน React Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน

Auth.js คืออะไร

Auth.js (เดิมคือ NextAuth.js v5) เป็นไลบรารีการยืนยันตัวตนแบบครบเครื่องสำหรับ Next.js โดยจัดการผู้ให้บริการ OAuth ข้อมูลรับรอง เซสชัน และ JWT ให้พร้อมใช้งานตั้งแต่ต้น

การติดตั้ง

ติดตั้ง Auth.js รุ่นเบตาและเริ่มต้นไฟล์ config

npm install next-auth@beta

# Create auth.ts at project root
touch auth.ts

สร้างการตั้งค่า Auth

กำหนดการตั้งค่า auth ใน auth.ts ที่ไดเรกทอรีรากของโปรเจกต์ พร้อมผู้ให้บริการและฟังก์ชันเรียกกลับ

import NextAuth from 'next-auth';
import GitHub from 'next-auth/providers/github';

export const { handlers, auth, signIn, signOut } = NextAuth({
  providers: [GitHub],
  callbacks: {
    session({ session, token }) {
      session.user.id = token.sub!;
      return session;
    },
  },
});

ตั้งค่าตัวจัดการเส้นทาง

สร้างตัวจัดการเส้นทางแบบรับทุกเส้นทางใน app/api/auth/[...nextauth]/route.ts ซึ่งส่งต่องานให้ตัวจัดการของ Auth.js

// app/api/auth/[...nextauth]/route.ts
import { handlers } from '@/auth';

export const { GET, POST } = handlers;

ตัวแปรสภาพแวดล้อม

กำหนดตัวแปรสภาพแวดล้อมที่จำเป็นสำหรับผู้ให้บริการ OAuth โดยต้องมี AUTH_SECRET สำหรับลงลายมือชื่อ JWT

# .env.local
AUTH_SECRET=your-random-secret-here

# GitHub OAuth
AUTH_GITHUB_ID=your-github-client-id
AUTH_GITHUB_SECRET=your-github-client-secret

# Generate AUTH_SECRET:
# npx auth secret

เพิ่มปุ่มเข้าสู่ระบบและออกจากระบบ

นำเข้า signIn และ signOut จาก auth.ts แล้วใช้ในฟอร์มของคอมโพเนนต์ฝั่งเซิร์ฟเวอร์

import { signIn, signOut } from '@/auth';

export function SignInButton() {
  return (
    <form action={async () => { 'use server'; await signIn('github'); }}>
      <button type="submit">Sign in with GitHub</button>
    </form>
  );
}

export function SignOutButton() {
  return (
    <form action={async () => { 'use server'; await signOut(); }}>
      <button type="submit">Sign out</button>
    </form>
  );
}

อ่านเซสชันในคอมโพเนนต์ฝั่งเซิร์ฟเวอร์

เรียกใช้ auth() จาก auth.ts ในคอมโพเนนต์ฝั่งเซิร์ฟเวอร์หรือตัวจัดการเส้นทางใดก็ได้ เพื่อรับเซสชันปัจจุบัน

import { auth } from '@/auth';

export default async function ProfilePage() {
  const session = await auth();
  if (!session) redirect('/login');
  return <h1>Welcome, {session.user?.name}</h1>;
}

ป้องกันหน้าด้วยมิดเดิลแวร์

ใช้มิดเดิลแวร์ของ Auth.js เพื่อป้องกันเส้นทางที่เอดจ์ โดยไม่ต้องเรียกใช้ตรรกะฝั่งเซิร์ฟเวอร์ในทุกคำขอ

// middleware.ts
export { auth as middleware } from '@/auth';

export const config = {
  matcher: ['/dashboard/:path*', '/profile/:path*'],
};

เซสชันในฐานข้อมูล

เพิ่มอะแดปเตอร์ฐานข้อมูล (เช่น @auth/prisma-adapter) เพื่อคงเซสชัน ผู้ใช้ และบัญชีไว้ในฐานข้อมูล แทนการใช้ JWT

import { PrismaAdapter } from '@auth/prisma-adapter';
import { prisma } from '@/lib/prisma';

export const { handlers, auth, signIn, signOut } = NextAuth({
  adapter: PrismaAdapter(prisma),
  providers: [GitHub],
  session: { strategy: 'database' },
});

ปรับแต่งชนิดของเซสชัน

ขยายชนิดเซสชันของ Auth.js เพื่อเพิ่มฟิลด์แบบกำหนดเอง เช่น ID ของผู้ใช้หรือบทบาท

// types/next-auth.d.ts
import { DefaultSession } from 'next-auth';

declare module 'next-auth' {
  interface Session {
    user: { id: string; role: string } & DefaultSession['user'];
  }
}

การจัดการข้อผิดพลาด

โดยค่าเริ่มต้น Auth.js จะเปลี่ยนเส้นทางไปยัง /error เมื่อการยืนยันตัวตนล้มเหลว สร้าง app/error/page.tsx เพื่อปรับแต่งหน้าข้อผิดพลาด

ตรวจสอบความเข้าใจ

คุณต้องสร้างไฟล์ใดเพื่อเปิดให้ตัวจัดการ GET และ POST ของ Auth.js ใช้งานได้ใน Next.js App Router

สรุป

ติดตั้ง next-auth@beta สร้าง auth.ts พร้อมผู้ให้บริการและฟังก์ชันเรียกกลับ เปิดให้ตัวจัดการใช้งานที่ app/api/auth/[...nextauth]/route.ts ตั้งค่า AUTH_SECRET และตัวแปรสภาพแวดล้อมของผู้ให้บริการ แล้วอ่านเซสชันด้วย auth() ในคอมโพเนนต์ฝั่งเซิร์ฟเวอร์

คำถามที่พบบ่อย

บทเรียน “การตั้งค่า Auth.js ใน Next.js App Router” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การตั้งค่า Auth.js ใน Next.js App Router” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส React Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การตั้งค่า Auth.js ใน Next.js App Router”

ติดตั้ง Auth.js กำหนดค่าตัวจัดการเส้นทาง และเพิ่มผู้ให้บริการ OAuth ของ GitHub คุณปฏิบัติ React Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน React Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน React Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “การตั้งค่า Auth.js ใน Next.js App Router” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน React Academy นี้ได้ไหม

ได้ บทเรียน React Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การตั้งค่า Auth.js ใน Next.js App Router
  2. การจัดการเซสชันและฮุก useSession
  3. ผู้ให้บริการข้อมูลรับรองและการเข้าสู่ระบบแบบกำหนดเอง
  4. การป้องกันเส้นทางด้วยมิดเดิลแวร์
← กลับไปที่ React Academy