# DB FIX v4.1.7 - Fix Login and Remove tootmine User **Дата:** 2025-12-30 **Версия:** v4.1.7 **Тип:** Database Fix + Security Update --- ## Проблема 1. **Login failed** - все попытки логина возвращали ошибку 2. Пользователь `tootmine` нужно удалить (дубликат kasutaja) --- ## Анализ Проблемы ### 1. Несовпадение хэшей паролей - **Бэкап БД**: использовал bcrypt хэши (`$2a$...`) - **Код приложения**: использует SHA-256 хэши - **Результат**: `verifyPassword()` не могла проверить пароли ### 2. Отсутствие колонки deleted_at - Код: `WHERE deleted_at IS NULL` - БД: колонка `deleted_at` отсутствовала в таблице `users` - **Результат**: SQL ошибка → 500 Internal Server Error --- ## Решение ### 1. Обновление паролей (SHA-256) ```sql -- admin / demo123 UPDATE users SET password_hash = 'd3ad9315b7be5dd53b31a273b3b3aba5defe700808305aa16a3062b76658a791' WHERE username = 'admin'; -- aknaproff / demo123 UPDATE users SET password_hash = 'd3ad9315b7be5dd53b31a273b3b3aba5defe700808305aa16a3062b76658a791' WHERE username = 'aknaproff'; -- kasutaja / tootmine UPDATE users SET password_hash = 'a1026b7bd143f7190248bc79901e9a357a408e208f2d8e4d38fccf184754f35f' WHERE username = 'kasutaja'; ``` ### 2. Удаление пользователя tootmine ```sql DELETE FROM users WHERE username = 'tootmine'; ``` ### 3. Добавление колонки deleted_at ```sql -- Для таблицы users ALTER TABLE users ADD COLUMN deleted_at DATETIME DEFAULT NULL; -- Для таблицы production_records (уже добавлено ранее) ALTER TABLE production_records ADD COLUMN deleted_at DATETIME DEFAULT NULL; ``` --- ## Текущее Состояние БД ### Пользователи (3 total) | ID | Username | Password | Role | Access | |----|----------|----------|------|--------| | 1 | admin | demo123 | admin | Полный доступ | | 2 | aknaproff | demo123 | admin | Полный доступ | | 4 | kasutaja | tootmine | user | Просмотр + проблемы | **Удалено:** - ~~3. tootmine / tootmine / user~~ ❌ (дубликат, удалён) ### Production Records - **Всего записей:** 38 - **Годы:** 2025, 2026 - **Месяцы:** Январь-Декабрь ### Schema Updates ✅ `users.deleted_at` - добавлена ✅ `production_records.deleted_at` - добавлена ✅ Все индексы сохранены --- ## Тестирование ### Backend API Tests ```bash # ✅ Admin login curl -X POST http://localhost:3000/api/auth/login \ -H "Content-Type: application/json" \ -d '{"username":"admin","password":"demo123"}' # → success: true, token: eyJ1c2VySWQiOjE... # ✅ Aknaproff login curl -X POST http://localhost:3000/api/auth/login \ -H "Content-Type: application/json" \ -d '{"username":"aknaproff","password":"demo123"}' # → success: true, token: eyJ1c2VySWQiOjI... # ✅ Kasutaja login curl -X POST http://localhost:3000/api/auth/login \ -H "Content-Type: application/json" \ -d '{"username":"kasutaja","password":"tootmine"}' # → success: true, token: eyJ1c2VySWQiOjQ... ``` ### Frontend Tests - ✅ Страница загружается - ✅ Форма логина отображается - ✅ Вход admin работает - ✅ Вход aknaproff работает - ✅ Вход kasutaja работает - ✅ Guest режим работает - ✅ Таблица с данными отображается - ✅ Нет JavaScript ошибок --- ## Deployment на Production ### ⚠️ КРИТИЧНО: База данных изменена Нужно выполнить 3 SQL команды на production: ```bash # 1. Добавить колонку deleted_at в users docker-compose exec aknaproff-backend sh -c \ "npx wrangler d1 execute webapp-production --local --command='ALTER TABLE users ADD COLUMN deleted_at DATETIME DEFAULT NULL'" # 2. Удалить пользователя tootmine docker-compose exec aknaproff-backend sh -c \ "npx wrangler d1 execute webapp-production --local --command='DELETE FROM users WHERE username = \"tootmine\"'" # 3. Обновить пароли (SHA-256) docker-compose exec aknaproff-backend sh -c \ "npx wrangler d1 execute webapp-production --local --command=' UPDATE users SET password_hash = \"d3ad9315b7be5dd53b31a273b3b3aba5defe700808305aa16a3062b76658a791\" WHERE username = \"admin\"; UPDATE users SET password_hash = \"d3ad9315b7be5dd53b31a273b3b3aba5defe700808305aa16a3062b76658a791\" WHERE username = \"aknaproff\"; UPDATE users SET password_hash = \"a1026b7bd143f7190248bc79901e9a357a408e208f2d8e4d38fccf184754f35f\" WHERE username = \"kasutaja\" '" ``` ### Проверка после deployment ```bash # Проверить пользователей docker-compose exec aknaproff-backend sh -c \ "npx wrangler d1 execute webapp-production --local --command='SELECT username, role FROM users'" # Должно вернуть: # admin | admin # aknaproff | admin # kasutaja | user # (3 пользователя, tootmine удалён) ``` --- ## Файлы для Копирования **НЕ ТРЕБУЕТСЯ** - код не изменён, только база данных. Если нужно обновить код (для v4.1.6): ```bash # Быстрый вариант (рекомендуется) scp dist/_worker.js user@server:/path/to/webapp/dist/ docker-compose restart # ИЛИ Полный вариант scp public/static/app.js user@server:/path/to/webapp/public/static/ scp public/original.html user@server:/path/to/webapp/public/ scp src/original-html.ts user@server:/path/to/webapp/src/ cd /path/to/webapp && npm run build && docker-compose restart ``` --- ## Статус - **Версия:** v4.1.7 (DB Fix) - **Код:** v4.1.6 (без изменений) - **База данных:** ✅ Исправлена - **Production URL:** https://3000-iabcqs9fpouqnd3allaai-82b888ba.sandbox.novita.ai - **HTTP Status:** 200 OK - **JavaScript Errors:** 0 - **Login Status:** ✅ Работает для всех пользователей --- ## Changelog ### v4.1.7 (2025-12-30) - Database Fix - 🔧 **FIX:** Обновлены пароли с bcrypt на SHA-256 - 🔧 **FIX:** Добавлена колонка `deleted_at` в таблицу `users` - 🗑️ **REMOVE:** Удалён пользователь `tootmine` (дубликат kasutaja) - ✅ **VERIFY:** Все логины работают (admin, aknaproff, kasutaja) - 📊 **DB:** 3 пользователя, 38 production записей --- ## Security Notes ### Пароли (SHA-256) ⚠️ **ВАЖНО:** SHA-256 используется для demo, в production рекомендуется bcrypt **Текущие хэши:** - `demo123` → `d3ad9315b7be5dd53b31a273b3b3aba5defe700808305aa16a3062b76658a791` - `tootmine` → `a1026b7bd143f7190248bc79901e9a357a408e208f2d8e4d38fccf184754f35f` ### Рекомендации 1. В production использовать bcrypt или argon2 2. Включить rate limiting для /api/auth/login 3. Добавить CSRF защиту 4. Использовать HTTPS только --- ## Итог ✅ **Проблема решена:** - Login работает для всех пользователей - Пользователь tootmine удалён - База данных полностью совместима с кодом v4.1.6 🎯 **Готово к deployment на production** Не забудьте выполнить SQL команды на production сервере!