Я трижды умудрился испортить свой Next.js Auth Matcher

Я сломал три проекта, прежде чем понял, как работает 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 никогда не запустится. Пользователь сможет отправить свои собственные заголовки на этот маршрут. Если ваш Server Component доверяет этим заголовкам, злоумышленник сможет выдать себя за кого угодно.

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

Я усвоил это на собственном горьком опыте: не полагайтесь исключительно на заголовки, передаваемые через proxy.

Используйте двухслойный подход:

Эта вторая проверка закрывает брешь. Даже если matcher пропустит маршрут, Server Component обнаружит неавторизованного пользователя. Это добавит несколько миллисекунд задержки, но предотвратит серьезную проблему с безопасностью.

Итоговый чек-лист:

Источник: https://dev.to/shubhradev/i-got-the-proxyts-matcher-wrong-for-three-projects-before-i-understood-why-4e5c