Я тричі провалив налаштування Matcher у Next.js Auth

Я зламав три проєкти, перш ніж зрозумів, як працює proxy.ts у Next.js 16.

Помилка була «тихою». Жодних логів. Жодних попереджень. Жодних помилок. Лише зламані редиректи та дірки в безпеці.

Якщо ви оновлюєтеся до Next.js 16, не варто просто запустити codemod і забути про все. Вам потрібно перевірити ці три речі.

Пастка міграції

Next.js перейменував middleware.ts на proxy.ts. І це не просто зміна назви.

Якщо ви оновлюєте пакет вручну без використання codemod, ваш старий файл middleware.ts може залишитися. Він успішно скомпілюється. Він пройде перевірки TypeScript. Але він нічого не робитиме. Ваші маршрути не будуть перехоплюватися. Ваші редиректи не спрацюють.

Перевірте ці три речі вручну:

Прогалина в Matcher

Matcher — це місце, де найчастіше виникають помилки в налаштуваннях автентифікації.

Якщо ваш matcher занадто широкий, proxy запускається для кожного CSS-файлу та зображення. Це спричиняє нескінченні цикли редиректів.

Якщо ваш matcher занадто вузький, ви створюєте дірку в безпеці.

Якщо маршрут не входить до вашого matcher, proxy ніколи не запуститься. Користувач може надіслати власні заголовки (headers) до цього маршруту. Якщо ваш Server Component довіряє цим заголовкам, зловмисник зможе видати себе за будь-кого.

Вирішення: не довіряйте заголовкам

Я засвоїв це на власному гіркому досвіді: не покладайтеся лише на заголовки, які передає proxy.

Використовуйте двошаровий підхід:

Ця друга перевірка закриває прогалину. Навіть якщо matcher пропустить маршрут, Server Component виявить неавторизованого користувача. Це додає кілька мілісекунд затримки, але запобігає масштабній проблемі з безпекою.

Підсумковий чекліст:

Джерело: https://dev.to/shubhradev/i-got-the-proxyts-matcher-wrong-for-three-projects-before-i-understood-why-4e5c