توسعه دهنده وب | متخصص ری اکت و نکست | طراح سایت |
به روز رسانی نکست و لایه احراز هویت
در مسیر ارتقای پروژه به نکست جی اس 16 و بهروزرسانی لایه احراز هویت (Auth.js)، تیم با چند مشکل فنی روبرو شد که نیاز به بررسی و اصلاح داشت. در زیر به مهمترین موارد اشاره میکنم که گزارش شده و راهحلهایی برای رفع آنها به کار گرفته شد:

👈 تغییر نام فایل middleware به proxy
یکی از اولین مشکلات بعد از ارتقا، هشدارهای مکرر در کنسول و build بود که فایل `middleware.ts` دیگر شناخته نمیشود.
دلیل: در نکست 16 این فایل بهطور رسمی منسوخ شده و به `proxy.ts` تغییر نام داده شده تا نقش آن بهعنوان لایه شبکهای (network boundary) واضحتر باشد و با مفهوم middleware در فریمورکهای دیگر (مثل Express) اشتباه نشود.
راهحل: فایل را rename کردم، نام تابع صادرشده را از `middleware` به `proxy` تغییر دادیم و config.matcher را بدون تغییر نگه داشتیم. منطق داخل فایل تقریباً همان ماند.
🎢 تطبیق ایمپورت importها و ساختار Auth.js با نسخه جدید
بعد از ارتقا، importهای قدیمی (مثل `NextAuth` از `next-auth` و providers به شکل قبلی) دیگر کار نمیکردند ی warningهای peer dependency میدادند.
مشکل اصلی مربوط به انتقال به Auth.js نسخه 5 (که هنوز در فاز beta/stable کامل نبود) و تغییرات در ساختار فایلها بود: نیاز به export `{ handlers, auth, signIn, signOut }` به جای `NextAuth(authOptions)` مستقیم.
راهحل: ساختار فایل auth را به شکل جدید بازنویسی کردم (فایل root یا lib/auth.ts) و route handler را فقط به re-export handlers محدود کردیم. همچنین از importهای جدید providers (مثل `Google` به جای `GoogleProvider`) استفاده شد.
🪚 مشکلات مربوط به پریسا کلاینت Prisma Client در نسخه ۷
با ارتقا، پریسما کلاینت در نسخه ۷ رفتار متفاوتی داشت؛ وقتی `output` سفارشی در generator تعریف شده بود، import از `@prisma/client` دیگر `PrismaClient` را export نمیکرد و نبه یپر از مسیر generate شده داشت. همچنین `new PrismaClient` بدون آرگومان ارور میداد.
راهحل: singleton Prisma را در فایل جداگانه تعریف کردم و از driver adapter مناسب (مثل `@prisma/adapter-pg) برای PostgreSQL استفاده کردم تا با پریسمای نسخه ۷ سازگار شود.
📿 تغییرات جزئی در config و callbacks
چند مورد کوچک دیگر مثل نیاز به استفاده از `AUTH_SECRET` به جای `NEXTAUTH_SECRET`، تنظیم `session: { strategy: "jwt" }` برای سازگاری بهتر با runtime جدید، و انتقال منطق authorized به callbacks (به جای withAuth قدیمی) گزارش شد.
این موارد با بهروزرسانی config و استفاده از `auth()` در server components حل شد.
این مشکلات عمدتاً مربوط به breaking changes مستندشده در نکست جی اس 16 و Auth.js v5 بود و با اعمال تغییرات مرحله ای و تست مجدد route های حفاظتشده و APIها، پروژه بدون downtime عمده به نسخه جدید رسید.
مرا دنبال کنید و تجربه خودتان را بنویسید.
مطلبی دیگر از این انتشارات
🧠 چگونه با ریاکت و هوش مصنوعی اپلیکیشنهایی بسازیم که واقعاً ارزش ایجاد میکنند؟
مطلبی دیگر از این انتشارات
چطور یک پروژه طراحی سایت نکست جی اس رو از حالت معمولی به مقیاسپذیر تبدیل کردم
مطلبی دیگر از این انتشارات
۳ ترفند ساده نکست جی اس که عملکرد اپلیکیشن رو تا ۶۰٪ بهتر میکنه