Перейти к содержанию

Аутентификация

Обзор функциональности

Стратегия аутентификации

Приложение использует 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

Навигация