- Реализовано хранение сессий в базе данных SQLite с помощью connect-sqlite3 - Добавлены API для проверки статуса аутентификации - Обновлены клиентские скрипты для управления состоянием аутентификации - Добавлены проверки аутентификации на страницах входа и профиля - Улучшено управление состоянием аутентификации в localStorage
67 lines
3.8 KiB
Markdown
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` - база данных сессий (создается автоматически)
|