Рецепты
Аутентификация, авторизация и несохранённые изменения
Выбор Redirect или Guard по требуемому исходу и обработка ожидаемого отказа без рекурсивной навигации.
Аутентификация, авторизация и несохранённые изменения
Направить пользователя без сессии на Login
Верните LoginDestination из Redirect. Защищённая Page не будет зафиксирована.
Отклонить пользователя без разрешения
Верните NavigationGuardDenied(reason: PermissionReason.missingRole) из enter Guard. Caller получит NavigationRejected, а граница представления решит, как объяснить отказ.
Защитить редактор от случайного выхода
Проверьте context.phase == NavigationGuardPhase.leave. Пока существует черновик, возвращайте типизированную причину отказа. После подтверждения удаления обновите состояние редактора и повторите исходное прикладное действие вне Guard.
Отреагировать на sign-out
Подключите состояние аутентификации через ListenableNavigationPolicyRefresh. Session согласует текущий Destination. Не заставляйте каждый видимый функциональный модуль самостоятельно слушать sign-out и заменять Page.
Разделить отказ и ошибку
Ожидаемый Guard denial — не исключение. Исключение из политики относится к инфраструктурной ошибке и должно попасть в NavigationFailureSink и диагностические события.