~3 دقیقه مطالعه • بروزرسانی ۲۱ آذر ۱۴۰۴
وبهوکها در Next.js
برای دریافت اعلان از سرویسهای خارجی مانند CMS، میتوانید از Route Handler استفاده کنید. مثال زیر مسیر /app/webhook/route.ts را بررسی میکند:
export async function GET(request: NextRequest) {
const token = request.nextUrl.searchParams.get('token')
if (token !== process.env.REVALIDATE_SECRET_TOKEN) {
return NextResponse.json({ success: false }, { status: 401 })
}
const tag = request.nextUrl.searchParams.get('tag')
if (!tag) {
return NextResponse.json({ success: false }, { status: 400 })
}
revalidateTag(tag)
return NextResponse.json({ success: true })
}آدرسهای بازگشتی (Callback URLs)
پس از تکمیل یک فرآیند در سرویس ثالث، کاربر به آدرس بازگشتی هدایت میشود. در این مسیر میتوان نشست را تنظیم کرد و کاربر را ریدایرکت نمود:
export async function GET(request: NextRequest) {
const token = request.nextUrl.searchParams.get('session_token')
const redirectUrl = request.nextUrl.searchParams.get('redirect_url')
const response = NextResponse.redirect(new URL(redirectUrl, request.url))
response.cookies.set({
value: token,
name: '_token',
path: '/',
secure: true,
httpOnly: true,
})
return response
}پراکسی در Next.js
فایل proxy.ts میتواند قبل از رسیدن درخواست به مسیر اصلی، پاسخ تولید کند. فقط یک فایل پراکسی در هر پروژه مجاز است.
export const config = {
matcher: '/api/:function*',
}
export function proxy(request: Request) {
if (!isAuthenticated(request)) {
return Response.json({ success: false, message: 'authentication failed' }, { status: 401 })
}
}مثالهای دیگر:
- پراکسیسازی مسیر خاص:
NextResponse.rewrite() - ریدایرکت مسیر قدیمی به جدید:
NextResponse.redirect()
امنیت در هندلرها
مدیریت هدرها
هدرهای ورودی را مستقیماً به پاسخ خروجی منتقل نکنید. هدرهای پاسخ قابل مشاهده برای کلاینت هستند.
محدودسازی نرخ (Rate Limiting)
export async function POST(request: Request) {
const { rateLimited } = await checkRateLimit(request)
if (rateLimited) {
return NextResponse.json({ error: 'Rate limit exceeded' }, { status: 429 })
}
return new Response(null, { status: 204 })
}اعتبارسنجی payload
- نوع و اندازهٔ داده را بررسی کنید
- در برابر XSS دادهها را پاکسازی کنید
- از timeout برای جلوگیری از سوءاستفاده استفاده کنید
دسترسی به منابع محافظتشده
- قبل از ارائهٔ داده، اعتبار کاربر را بررسی کنید
- از پراکسی بهتنهایی برای احراز هویت استفاده نکنید
- دادههای حساس را از پاسخها و لاگها حذف کنید
- کلیدهای API را بهصورت دورهای چرخش دهید
پیشدرخواستها (Preflight)
درخواستهای OPTIONS به سرور اعلام میکنند که آیا درخواست اصلی مجاز است. اگر تعریف نشده باشد، Next.js بهصورت خودکار آن را اضافه میکند.
الگوهای کتابخانهای
برخی کتابخانهها از الگوی factory برای ساخت هندلر استفاده میکنند:
import { createHandler } from 'third-party-library'
const handler = createHandler({ /* options */ })
export const GET = handler
export { handler as POST }نکات مهم
- در Server Components، داده را مستقیماً از منبع fetch کنید
- در حالت export، فقط هندلرهای GET با
dynamic = 'force-static'پشتیبانی میشوند - در محیطهای serverless، هندلرها بهصورت فانکشنهای جداگانه اجرا میشوند و نمیتوانند داده بین درخواستها به اشتراک بگذارند
جمعبندی
Next.js ابزارهای قدرتمندی برای دریافت رویدادها، مدیریت نشست، پراکسیسازی، و کنترل امنیت در بکاند فراهم میکند. با استفاده از Route Handler، پراکسی، و بررسی دقیق درخواستها، میتوان لایهای امن و منعطف برای تعامل با سرویسهای خارجی ساخت.
نوشته و پژوهش شده توسط دکتر شاهین صیامی