Ключевое требование заключается в том, что это обеспечение должно осуществляться на стороне сервера и не может быть обойти. Защиты на стороне клиента (например, проверка состояния React или перенаправление в useEffect) недостаточны, поскольку пользователь может обойти их, манипулируя клиентом или перейдя непосредственно к маршруту.
Что я пробовал
- Защитники маршрутов на стороне клиента с использованием состояния React и перенаправлений
- Проверка флагов завершения в браузере перед отображением страницы.
Чего я пытаюсь достичь
Я хочу, чтобы сервер был авторитетным в отношении маршрута доступ. Если необходимый шаг не был выполнен (как записано на стороне сервера), пользователь должен быть заблокирован или перенаправлен перед отображением страницы.
Минимальный пример
Предположим, у меня есть флаг завершения, хранящийся на стороне сервера (например, в базе данных):
Код: Выделить всё
// example server-side check
const hasCompletedStep = await db.userSteps.isComplete(userId);
Каков рекомендуемый способ обеспечить это в Next.js (App Router или Pages Router), используя такие механизмы, как промежуточное программное обеспечение, серверные компоненты или обработчики маршрутов, чтобы контроль доступа нельзя было обойти на стороне клиента?
Уточнение
Мне не нужны охранники, занимающиеся только пользовательским интерфейсом. Меня особенно интересуют шаблоны шлюзования маршрутов, обеспечиваемые сервером, которые гарантируют, что пользователь не сможет получить доступ к защищенному маршруту, пока не будет выполнен необходимый шаг.
Подробнее здесь: https://stackoverflow.com/questions/798 ... to-a-route
Мобильная версия