NoteJS/SESSION_PERSISTENCE_UPDATE.md
Fovway e4b2be3052 feat: добавлена поддержка сессий с использованием SQLite и улучшена аутентификация
- Реализовано хранение сессий в базе данных SQLite с помощью connect-sqlite3
- Добавлены API для проверки статуса аутентификации
- Обновлены клиентские скрипты для управления состоянием аутентификации
- Добавлены проверки аутентификации на страницах входа и профиля
- Улучшено управление состоянием аутентификации в localStorage
2025-10-19 15:15:05 +07:00

3.8 KiB

Обновление системы аутентификации для сохранения сессии при перезагрузке сервера

Проблема

При перезагрузке сервера пользователи разлогинивались, так как сессии хранились только в памяти.

Решение

Реализована двухуровневая система аутентификации:

1. Клиентская часть (localStorage)

  • Файлы изменены:

    • public/login.js - сохранение состояния аутентификации при входе
    • public/register.js - сохранение состояния аутентификации при регистрации
    • public/app.js - проверка аутентификации при загрузке страницы заметок
    • public/profile.js - проверка аутентификации при загрузке профиля
  • Функциональность:

    • Сохранение флага isAuthenticated и username в localStorage
    • Проверка аутентификации при загрузке защищенных страниц
    • Очистка localStorage при выходе
    • Автоматическое перенаправление неавторизованных пользователей

2. Серверная часть (SQLite)

  • Файлы изменены:

    • server.js - добавлено хранение сессий в SQLite
  • Новые зависимости:

    • connect-sqlite3 - для хранения сессий в базе данных
  • Функциональность:

    • Сессии теперь сохраняются в файле sessions.db
    • Время жизни сессии: 7 дней
    • Новый API endpoint /api/auth/status для проверки статуса аутентификации

Как это работает

  1. При входе/регистрации:

    • Сервер создает сессию и сохраняет её в SQLite
    • Клиент сохраняет флаг аутентификации в localStorage
  2. При загрузке страницы:

    • Клиент проверяет localStorage
    • Если пользователь "авторизован", проверяется серверная сессия
    • Если серверная сессия действительна, пользователь остается авторизованным
  3. При перезагрузке сервера:

    • Сессии восстанавливаются из SQLite
    • Пользователи остаются авторизованными
  4. При выходе:

    • Серверная сессия удаляется
    • localStorage очищается

Безопасность

  • Сессии имеют ограниченное время жизни (7 дней)
  • Проверка аутентификации происходит как на клиенте, так и на сервере
  • При недействительной серверной сессии пользователь автоматически разлогинивается

Тестирование

  1. Войдите в систему через браузер
  2. Перезагрузите сервер (Ctrl+C и снова node server.js)
  3. Обновите страницу в браузере
  4. Пользователь должен остаться авторизованным

Файлы базы данных

  • notes.db - основная база данных приложения
  • sessions.db - база данных сессий (создается автоматически)