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

67 lines
3.8 KiB
Markdown

# Обновление системы аутентификации для сохранения сессии при перезагрузке сервера
## Проблема
При перезагрузке сервера пользователи разлогинивались, так как сессии хранились только в памяти.
## Решение
Реализована двухуровневая система аутентификации:
### 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` - база данных сессий (создается автоматически)