การตั้งค่า 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การตั้งค่า Auth.js ใน Next.js App Router
- การจัดการเซสชันและฮุก useSession
- ผู้ให้บริการข้อมูลรับรองและการเข้าสู่ระบบแบบกำหนดเอง
- การป้องกันเส้นทางด้วยมิดเดิลแวร์