0Pricing
React Academy · درس

إعداد Auth.js في Next.js App Router

ثبّت Auth.js واضبط معالجات المسارات وأضف موفّر OAuth لـ GitHub.

إعداد Auth.js في Next.js App Router درس مجاني في React Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في React Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة React Academy 4 دروس في المجموع.

ما المقصود بـ Auth.js؟

Auth.js (المعروفة سابقًا باسم NextAuth.js v5) هي مكتبة متكاملة للمصادقة في Next.js. وهي تتولى مزوّدي OAuth وبيانات الاعتماد والجلسات وJWT مباشرةً.

التثبيت

ثبّت الإصدار التجريبي من Auth.js وبادئ ملف الإعداد.

npm install next-auth@beta

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

إنشاء إعداد المصادقة

عرّف إعداد المصادقة في 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>;
}

حماية الصفحات باستخدام Middleware

استخدم Middleware الخاص بـ 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 لتتضمن حقولًا مخصصة، مثل معرّف المستخدم أو الدور.

// 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» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة React Academy، انتقل إلى CoddyKit PRO. تتضمن دورة React Academy 4 دروس في المجموع.

ماذا ستتعلم في «إعداد Auth.js في Next.js App Router»؟

ثبّت Auth.js واضبط معالجات المسارات وأضف موفّر OAuth لـ GitHub. تتمرن على React Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ React Academy؟

لا تُشترط خبرة سابقة. React Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «إعداد Auth.js في Next.js App Router»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس React Academy هذا؟

نعم. كل درس في React Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. إعداد Auth.js في Next.js App Router
  2. إدارة الجلسات وuseSession Hook
  3. موفّر بيانات الاعتماد وتسجيل الدخول المخصص
  4. حماية المسارات المستندة إلى Middleware
← العودة إلى React Academy