Аутентификация¶
Стратегия аутентификации¶
Приложение использует JWT-аутентифик��цию с двумя токенами:
- Access token — короткоживущий, передаётся в загол��вке Authorization: Bearer <token>
- Refresh token — долгоживущий, используется для обновления access token при 401-ответе
Оба токена хранятся в localStorage (ключи plechiki_access_token, plechiki_refresh_token).
Sequence diagram: полный цикл аутент��фикации¶
sequenceDiagram
participant U as Пользователь
participant LP as LoginPage
participant API as Backend API
participant Store as authStore
participant LS as localStorage
Note over U, LS: Регистрация
U->>LP: Заполняет форму (name, email, password)
LP->>API: POST /auth/register
API-->>LP: { access_token, refresh_token }
LP->>Store: setTokens(access, refresh)
Store->>LS: Сохранение токенов
LP->>API: GET /users/me
API-->>LP: User object
LP->>Store: setUser(user)
LP->>U: navigate(redirectTarget)
Note over U, LS: Логин
U->>LP: Вводит email + password
LP->>API: POST /auth/login
API-->>LP: { access_token, refresh_token }
LP->>Store: setTokens(access, refresh)
LP->>API: GET /users/me
API-->>LP: User object
LP->>Store: setUser(user)
Note over U, LS: Автообновление токена (interceptor)
U->>API: Любой запрос (401)
API-->>Store: 401 Unauthorized
Store->>API: POST /auth/refresh { refresh_token }
API-->>Store: { new_access_token, new_refresh_token }
Store->>LS: Обновление токенов
Store->>API: Повторный запрос с новым токеном
Note over U, LS: Выход
U->>Store: logout()
Store->>LS: Удаление токенов + user
Store->>Store: clearLocalData(), clearFeedSessionCache()

Хранилище состояния (authStore)¶
Zustand-хранилище useAuthStore управляет:
- accessToken, refreshToken ��� JWT-токены
- user — профиль пользователя (User | null)
- isAuthenticated — булевый флаг (определяется наличием accessToken)
- hydrate() — восстановление состояния из localStorage при запуске
Данные пользователя сериализуются в localStorage под ключом plechiki_user.
Страницы¶
| Страница | Назначение | Особенности |
|---|---|---|
| LoginPage | Вход по email + пароль | Redirect-параметр, тестовый пользователь, offline-sync после входа |
| RegisterPage | Регистрация (name, email, password) | Валидация min 8 символов, получение профиля после регистрации |
API-модуль¶
// Методы authApi (frontend/src/api/auth.ts)
authApi.login(data) // POST /auth/login
authApi.register(data) // POST /auth/register
authApi.refresh(token) // POST /auth/refresh
authApi.getMe() // GET /users/me
authApi.updateMe(data) // PATCH /users/me
authApi.changePassword() // POST /users/me/password
Навигация¶
- → Код interceptors: jwt-interceptors.md
- → Код страниц: auth-pages.md