Merge branch 'fix/v1.1.4-no-loading-gate' into 'main'

fix(admin-ui): RequireAuth не блокирует UI пока silent SSO loading

See merge request 2-6/2-6-4/terravault/ordinis!27
This commit is contained in:
Александр Зимин
2026-05-10 21:15:14 +00:00
+10 -11
View File
@@ -67,18 +67,17 @@ export function RequireAuth({ children }: { children: ReactNode }) {
) )
} }
// Loading — initial OIDC bootstrap (silent SSO check). Показываем нейтральный // ВАЖНО: НЕ блокируем UI пока {@code auth.isLoading=true}. Initial OIDC
// spinner, чтобы избежать flash of unauthenticated UI если silent SSO успеет // bootstrap может зависать на 10-20 сек если Keycloak silent SSO iframe
// вернуть active session. // блокируется X-Frame-Options или сеть медленная. Anonymous user в это
if (auth.isLoading) { // время видит только spinner и может подумать что сайт сломан.
return ( // Решение: рендерим children immediately. AuthBadge в top bar сам
<div className="min-h-screen flex items-center justify-center"> // показывает loading state своим маленьким индикатором, а PUBLIC данные
<div className="text-sm text-carbon/60 font-secondary">Загрузка</div> // (которые backend отдаёт без auth) грузятся параллельно с silent SSO.
</div> // Если silent SSO succeed позже — useAuth() обновит scope, кнопки
) // create/edit активируются автоматически (canMutate реактивен).
}
// Anonymous OR authenticated — рендерим children всегда. UI в дочерних // Anonymous OR authenticated OR loading — рендерим children всегда. UI в
// компонентах сам адаптируется (через useAuth().isAuthenticated): // компонентах сам адаптируется (через useAuth().isAuthenticated):
// hide mutation buttons, show «Войти» CTA, тонировать blocked actions. // hide mutation buttons, show «Войти» CTA, тонировать blocked actions.
return <>{children}</> return <>{children}</>