توسعه دهنده وب | متخصص ری اکت و نکست | طراح سایت |
به روز رسانی نکست و لایه احراز هویت
در مسیر ارتقای پروژه به نکست جی اس 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 عمده به نسخه جدید رسید.
مرا دنبال کنید و تجربه خودتان را بنویسید.
مطلبی دیگر از این انتشارات
چطور یک پروژه طراحی سایت نکست جی اس رو از حالت معمولی به مقیاسپذیر تبدیل کردم
مطلبی دیگر از این انتشارات
۳ ترفند ساده نکست جی اس که عملکرد اپلیکیشن رو تا ۶۰٪ بهتر میکنه
مطلبی دیگر از این انتشارات
🧠 چگونه با ریاکت و هوش مصنوعی اپلیکیشنهایی بسازیم که واقعاً ارزش ایجاد میکنند؟