README.md

    Аутентификация - Vue 3, JWT, Firebase, Pinia

    Описание

    Это приложение на Vue 3 с использованием Pinia для управления состоянием и Firebase Authentication для аутентификации пользователей. Приложение реализует регистрацию, вход и защищённый доступ к контенту (например, к списку автомобилей). Для хранения токенов используется localStorage, а для API-запросов — библиотека Axios с перехватчиками запросов и ответов.

    Приложение позволяет пользователям регистрироваться, входить в систему и просматривать список автомобилей, если они аутентифицированы. Система токенов реализована через Firebase, и пользователи могут оставаться аутентифицированными между сессиями благодаря сохранению токенов в localStorage.

    Функционал

    1. Аутентификация пользователей

    • Регистрация и вход через Firebase Authentication.
    • После успешной регистрации/входа токены пользователя (JWT) сохраняются в localStorage.
    • Для неаутентифицированных пользователей доступны только страницы регистрации и входа.
    • Если пользователь не аутентифицирован, при попытке зайти на защищённые страницы его перенаправляют на страницу входа.

    2. Маршрутизация

    • Используется vue-router для организации маршрутов в приложении.
    • Защищённые маршруты: некоторые страницы доступны только для аутентифицированных пользователей (например, страница с автомобилями).
    • Переадресация:
      • Аутентифицированные пользователи перенаправляются на страницу автомобилей при попытке попасть на страницы регистрации или входа.
      • Неаутентифицированные пользователи перенаправляются на страницу входа, если пытаются перейти на защищённый маршрут.

    3. API-запросы

    • Axios используется для отправки запросов к Firebase Realtime Database.
    • Реализованы перехватчики запросов и ответов:
      • Перехватчик запросов автоматически добавляет JWT в заголовок для всех запросов, кроме регистрации и входа.
      • Перехватчик ответов обновляет токен, если он истёк, и повторно отправляет запрос.
      • Если обновление токена не удалось, пользователь перенаправляется на страницу входа.

    4. Управление состоянием

    • Pinia используется для управления состоянием аутентификации.
    • Состояние хранит данные пользователя (токен, email, ID и refreshToken).
    • Данные пользователя сбрасываются при выходе из системы, и токены удаляются из localStorage.

    5. Компоненты

    • App.vue: Главный компонент приложения, содержащий навигационное меню и управляющий общими маршрутами.
    • SignUp.vue: Компонент регистрации с формой для ввода email и пароля.
    • SignIn.vue: Компонент входа с формой для ввода email и пароля.
    • Cars.vue: Компонент отображения списка автомобилей для аутентифицированных пользователей.
    • Loader.vue: Компонент для отображения загрузки.

    Основные технологии

    • Vue 3: основа фронтенд-приложения.
    • Pinia: управление состоянием приложения.
    • Firebase: аутентификация пользователей и база данных.
    • Axios: для выполнения HTTP-запросов.
    • Vue Router: для маршрутизации.
    • PrimeVue: UI-компоненты для создания интерфейсов.

    Установка и запуск

    1. Клонирование репозитория

    git clone https://github.com/your-repo/vue3-jwt-pinia.git
    cd vue3-jwt-pinia
    

    2. Установка зависимостей

    npm install
    

    3. Конфигурация Firebase

    Создайте файл .env в корневой директории проекта и добавьте свои Firebase ключи:

    VITE_API_KEY_FIREBASE=your_firebase_api_key
    

    4. Запуск приложения

    npm run dev
    

    Структура проекта

    ├── src
    │   ├── api.js             # Конфигурация Axios с перехватчиками
    │   ├── main.js            # Главный файл приложения
    │   ├── router
    │   │   └── index.js       # Настройка маршрутизации
    │   ├── stores
    │   │   └── auth.js        # Pinia store для аутентификации
    │   ├── views
    │   │   ├── HomeView.vue   # Главная страница
    │   │   ├── SignUp.vue     # Страница регистрации
    │   │   ├── SignIn.vue     # Страница входа
    │   │   ├── Cars.vue       # Страница списка автомобилей (только для аутентифицированных пользователей)
    │   ├── components
    │   │   └── Loader.vue     # Компонент загрузки
    │   └── App.vue            # Главный компонент приложения
    
    Описание

    Аутентификация - Firebase, Pinia, JWT tokens

    Конвейеры
    0 успешных
    0 с ошибкой