AUTH-03: Auth context и автовход
Что сделать
Реализовать AuthContext: хранение токенов, auto-refresh, redirect при 401.
Смотри спеку
Секция “Сессия и автовход” в Авторизация — Логин.
Конкретно
AuthContext
user— текущий пользователь (из JWT payload или /me)isAuthenticated— booleanlogin(tokens)— сохранить токены, установить userlogout()— очистить токены, redirect/login
Хранение токенов
access_tokenиrefresh_tokenв localStorage- Helper:
getTokens(),saveTokens(),clearTokens()
Auto-refresh (interceptor)
authFetch()— обёртка над fetch- При ответе 401 → попробовать
POST /api/v1/admin/auth/refreshс refresh_token - Если refresh успешен → сохранить новые токены, повторить запрос
- Если refresh неуспешен → clearTokens, redirect
/login
Автовход при открытии /login
- Есть
access_token? → проверить (не expired?) → redirect/ - Expired? → попробовать refresh → redirect
/или остаться на/login
Protected routes
<ProtectedRoute>компонент — проверяет isAuthenticated- Если нет → redirect
/login - Обернуть все роуты кроме
/login,/forgot-password,/reset-password
Файлы
web/src/contexts/AuthContext.tsx— создатьweb/src/api/client.ts— создать (authFetch с interceptor)web/src/api/auth.ts— добавить refresh, logoutweb/src/App.tsx— обернуть в AuthProvider, добавить ProtectedRoute
Зависит от
- AUTH-01 (BFF прокси)