به روز رسانی نکست و لایه احراز هویت

در مسیر ارتقای پروژه به نکست جی اس 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 عمده به نسخه جدید رسید.

مرا دنبال کنید و تجربه خودتان را بنویسید.