پیاده‌سازی احراز هویت در Next.js – ثبت‌نام امن، اعتبارسنجی فرم و مدیریت نشست

احراز هویت در Next.js شامل تأیید هویت کاربر، مدیریت نشست و کنترل دسترسی به مسیرهاست. این مقاله نحوهٔ ساخت فرم ثبت‌نام امن با Server Actions و useActionState، اعتبارسنجی با Zod، و ایجاد حساب کاربری با رمز عبور هش‌شده را بررسی می‌کند. همچنین نکات امنیتی و تجربی برای بهبود UX ارائه شده است.

Next.js authenticationServer ActionsuseActionStateZod validationSession management

~3 min read · Updated Oct 26, 2025

مبانی احراز هویت در Next.js


احراز هویت شامل سه بخش اصلی است:

  • Authentication: تأیید هویت کاربر (مثلاً با ایمیل و رمز عبور)
  • Session Management: پیگیری وضعیت ورود کاربر در درخواست‌های مختلف
  • Authorization: کنترل دسترسی به مسیرها و داده‌ها

مرحله ۱ – دریافت اطلاعات کاربر


فرمی بسازید که اطلاعات کاربر را به Server Action ارسال کند:

// app/ui/signup-form.tsx
import { signup } from '@/app/actions/auth'

export function SignupForm() {
  return (
    <form action={signup}>
      <input name="name" placeholder="نام" />
      <input name="email" type="email" placeholder="ایمیل" />
      <input name="password" type="password" />
      <button type="submit">ثبت‌نام</button>
    </form>
  )
}

مرحله ۲ – اعتبارسنجی در سرور


از Zod برای تعریف اعتبارسنجی فرم استفاده کنید:

// app/lib/definitions.ts
import * as z from 'zod'

export const SignupFormSchema = z.object({
  name: z.string().min(2).trim(),
  email: z.email().trim(),
  password: z
    .string()
    .min(8)
    .regex(/[a-zA-Z]/)
    .regex(/[0-9]/)
    .regex(/[^a-zA-Z0-9]/)
    .trim(),
})

در Server Action اعتبارسنجی را انجام دهید و در صورت خطا، زودتر بازگردید:

// app/actions/auth.ts
import { SignupFormSchema } from '@/app/lib/definitions'

export async function signup(_, formData) {
  const validated = SignupFormSchema.safeParse({
    name: formData.get('name'),
    email: formData.get('email'),
    password: formData.get('password'),
  })

  if (!validated.success) {
    return {
      errors: validated.error.flatten().fieldErrors,
    }
  }

  // ادامه ساخت کاربر...
}

مرحله ۳ – نمایش خطاهای اعتبارسنجی


با استفاده از useActionState خطاها را در فرم نمایش دهید:

// app/ui/signup-form.tsx
'use client'
import { signup } from '@/app/actions/auth'
import { useActionState } from 'react'

export default function SignupForm() {
  const [state, action, pending] = useActionState(signup, undefined)

  return (
    <form action={action}>
      <input name="name" />
      {state?.errors?.name && <p>{state.errors.name}</p>}

      <input name="email" />
      {state?.errors?.email && <p>{state.errors.email}</p>}

      <input name="password" type="password" />
      {state?.errors?.password && (
        <ul>
          {state.errors.password.map((e) => <li key={e}>{e}</li>)}
        </ul>
      )}

      <button disabled={pending}>ثبت‌نام</button>
    </form>
  )
}

مرحله ۴ – ساخت حساب کاربری


رمز عبور را هش کرده و کاربر را در دیتابیس ذخیره کنید:

// app/actions/auth.ts
import bcrypt from 'bcrypt'

export async function signup(_, formData) {
  // اعتبارسنجی...
  const { name, email, password } = validated.data
  const hashedPassword = await bcrypt.hash(password, 10)

  const user = await db.insert(users).values({
    name,
    email,
    password: hashedPassword,
  }).returning({ id: users.id })

  if (!user) {
    return { message: 'خطا در ساخت حساب کاربری.' }
  }

  // TODO: ساخت نشست و ریدایرکت
}

نکات و توصیه‌ها


  • برای سادگی و امنیت بیشتر از کتابخانه‌های احراز هویت استفاده کنید
  • وجود ایمیل یا نام کاربری تکراری را زودتر بررسی کنید
  • برای کاهش تعداد درخواست‌ها از کتابخانه‌هایی مثل use-debounce استفاده کنید
  • قبل از تغییر داده‌ها، حتماً مجوز کاربر را بررسی کنید

جمع‌بندی


احراز هویت در Next.js با Server Actions، اعتبارسنجی فرم و مدیریت نشست قابل پیاده‌سازی است. اگرچه ساخت راهکار سفارشی ممکن است، استفاده از کتابخانه‌های معتبر می‌تواند فرآیند را ساده‌تر و امن‌تر کند.


Written & researched by Dr. Shahin Siami

Related Articles

مسیریابی پیشرفته و هوک‌های عملکرد در Next.js — راهنمای توسعه‌دهنده برای App Router

Next.js مجموعه‌ای غنی از هوک‌های کلاینت و ابزارهای کش و ناوبری را در اختیار توسعه‌دهندگان قرار می‌دهد. از خواندن پارامترهای مسیر تا گزارش Web Vitals و مدیریت کش، این مقاله مهم‌ترین ابزارهای App Router را با مثال‌های کاربردی معرفی می‌کند.

Continue

مدیریت احراز هویت و کش در Next.js — راهنمای توسعه‌دهنده برای امنیت و عملکرد پویا

Next.js با معرفی قابلیت‌های آزمایشی جدید، امکان کنترل دقیق‌تر دسترسی و کش داده‌ها را فراهم کرده است. تابع unauthorized برای مدیریت خطای 401 و هدایت کاربران به صفحه ورود، unstable_cache برای کش هوشمند عملیات سنگین، updateTag برای بازسازی آنی داده‌ها، و useLinkStatus برای نمایش وضعیت ناوبری استفاده می‌شوند. این مقاله نحوه استفاده از این ابزارها را با مثال‌های کاربردی و نکات مهم بررسی می‌کند.

Continue

redirect و refresh در Next.js — ریدایرکت‌های هوشمند و تازه‌سازی مسیر در Server Actions

تابع redirect در Next.js برای هدایت کاربر به مسیر جدید استفاده می‌شود و بسته به نوع استفاده، پاسخ HTTP با وضعیت 307 یا 303 ارسال می‌کند. این تابع در Server Components، Client Components، Route Handlers و Server Actions قابل استفاده است. تابع refresh نیز برای تازه‌سازی مسیر کلاینت از درون Server Action استفاده می‌شود. این مقاله نحوه استفاده از هر دو تابع را با مثال‌های کاربردی و نکات مهم توضیح می‌دهد.

Continue

Next.js با معرفی NextRequest و NextResponse، APIهای Request و Response مرورگر را گسترش داده و ابزارهای قدرتمندی برای مدیریت کوکی‌ها، هدرها، ریدایرکت‌ها، بازنویسی مسیرها و پاسخ‌های JSON فراهم کرده است. این مقاله نحوه استفاده از این ابزارها را با مثال‌های کاربردی و نکات امنیتی توضیح می‌دهد.

Next.js با معرفی NextRequest و NextResponse، APIهای Request و Response مرورگر را گسترش داده و ابزارهای قدرتمندی برای مدیریت کوکی‌ها، هدرها، ریدایرکت‌ها، بازنویسی مسیرها و پاسخ‌های JSON فراهم کرده است. این مقاله نحوه استفاده از این ابزارها را با مثال‌های کاربردی و نکات امنیتی توضیح می‌دهد.

Continue

headers، ImageResponse، notFound و permanentRedirect در Next.js — مدیریت درخواست‌ها، تولید تصویر، خطا و ریدایرکت

Next.js ابزارهای قدرتمندی برای مدیریت درخواست‌ها و پاسخ‌ها در کامپوننت‌های سروری فراهم کرده است. تابع headers برای خواندن هدرهای HTTP ورودی، ImageResponse برای تولید تصاویر داینامیک، notFound برای نمایش صفحه خطای 404، و permanentRedirect برای ریدایرکت دائمی کاربران استفاده می‌شوند. این مقاله نحوه استفاده از هر یک را با مثال‌های کاربردی توضیح می‌دهد.

Continue

راهنمای کامل استفاده از metadata و generateMetadata در Next.js

در نسخه‌های مدرن Next.js، مدیریت metadata صفحات بسیار قدرتمندتر و ساده‌تر شده است. metadata به‌صورت خودکار در تگ <head> صفحات تزریق می‌شود و نقش مهمی در SEO، اشتراک‌گذاری اجتماعی و تجربه کاربری دارد. این مقاله دو روش اصلی تعریف metadata را بررسی می‌کند: استفاده از آبجکت ثابت metadata و تابع داینامیک generateMetadata.

Continue