- Реализовано хранение сессий в базе данных SQLite с помощью connect-sqlite3 - Добавлены API для проверки статуса аутентификации - Обновлены клиентские скрипты для управления состоянием аутентификации - Добавлены проверки аутентификации на страницах входа и профиля - Улучшено управление состоянием аутентификации в localStorage
3.8 KiB
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для проверки статуса аутентификации
- Сессии теперь сохраняются в файле
Как это работает
-
При входе/регистрации:
- Сервер создает сессию и сохраняет её в SQLite
- Клиент сохраняет флаг аутентификации в localStorage
-
При загрузке страницы:
- Клиент проверяет localStorage
- Если пользователь "авторизован", проверяется серверная сессия
- Если серверная сессия действительна, пользователь остается авторизованным
-
При перезагрузке сервера:
- Сессии восстанавливаются из SQLite
- Пользователи остаются авторизованными
-
При выходе:
- Серверная сессия удаляется
- localStorage очищается
Безопасность
- Сессии имеют ограниченное время жизни (7 дней)
- Проверка аутентификации происходит как на клиенте, так и на сервере
- При недействительной серверной сессии пользователь автоматически разлогинивается
Тестирование
- Войдите в систему через браузер
- Перезагрузите сервер (Ctrl+C и снова
node server.js) - Обновите страницу в браузере
- Пользователь должен остаться авторизованным
Файлы базы данных
notes.db- основная база данных приложенияsessions.db- база данных сессий (создается автоматически)