v2.0.0: Multi-user authentication with JWT
Some checks failed
Build and Push Docker Image / build-and-push (push) Failing after 16s

Features:
- User registration and login with JWT tokens
- All data is now user-specific (multi-tenancy)
- Profile page with integrations and logout
- Automatic migration of existing data to first user

Backend changes:
- Added users and refresh_tokens tables
- Added user_id to all data tables (projects, entries, nodes, dictionaries, words, progress, configs, telegram_integrations, weekly_goals)
- JWT authentication middleware
- claimOrphanedData() for data migration

Frontend changes:
- AuthContext for state management
- Login/Register forms
- Profile page (replaced Integrations)
- All API calls use authFetch with Bearer token

Migration notes:
- On first deploy, backend automatically adds user_id columns
- First user to login claims all existing data
This commit is contained in:
poignatov
2026-01-01 18:21:18 +03:00
parent 6015b62d29
commit 4a06ceb7f6
23 changed files with 1970 additions and 279 deletions

View File

@@ -100,15 +100,24 @@ echo " База: $DB_NAME"
echo " Хост: $DB_HOST:$DB_PORT"
echo " Файл: $FULL_DUMP_PATH"
# Распаковываем, если сжат
# Распаковываем и модифицируем дамп
TEMP_DUMP="/tmp/restore_$$.sql"
if [[ "$FULL_DUMP_PATH" == *.gz ]]; then
echo " Распаковка дампа..."
gunzip -c "$FULL_DUMP_PATH" > "$TEMP_DUMP"
echo " Распаковка и модификация дампа..."
gunzip -c "$FULL_DUMP_PATH" | \
sed 's/n8n_user/'"$DB_USER"'/g' | \
sed '/^\\restrict/d' | \
sed '/^\\unrestrict/d' > "$TEMP_DUMP"
else
cp "$FULL_DUMP_PATH" "$TEMP_DUMP"
echo " Модификация дампа..."
cat "$FULL_DUMP_PATH" | \
sed 's/n8n_user/'"$DB_USER"'/g' | \
sed '/^\\restrict/d' | \
sed '/^\\unrestrict/d' > "$TEMP_DUMP"
fi
echo " Владелец таблиц в дампе заменён на: $DB_USER"
# Восстанавливаем через docker-compose, если контейнер запущен
if docker-compose ps db 2>/dev/null | grep -q "Up"; then
echo " Используется docker-compose..."
@@ -132,5 +141,33 @@ fi
# Удаляем временный файл
rm -f "$TEMP_DUMP"
echo "✅ База данных успешно восстановлена из дампа!"
echo ""
echo "📦 Применение миграций для добавления user_id..."
# Определяем путь к миграциям
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
MIGRATIONS_DIR="$SCRIPT_DIR/play-life-backend/migrations"
if [ -d "$MIGRATIONS_DIR" ]; then
# Применяем миграцию 009 для добавления user_id
MIGRATION_FILE="$MIGRATIONS_DIR/009_add_users_and_multitenancy.sql"
if [ -f "$MIGRATION_FILE" ]; then
echo " Применяем миграцию: 009_add_users_and_multitenancy.sql"
if docker-compose ps db 2>/dev/null | grep -q "Up"; then
docker-compose exec -T db psql -U "$DB_USER" -d "$DB_NAME" < "$MIGRATION_FILE" 2>/dev/null || true
elif command -v psql &> /dev/null; then
PGPASSWORD="$DB_PASSWORD" psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" < "$MIGRATION_FILE" 2>/dev/null || true
fi
echo " ✅ Миграция применена"
fi
else
echo " ⚠️ Директория миграций не найдена: $MIGRATIONS_DIR"
echo " Миграции будут применены при запуске бэкенда"
fi
echo ""
echo "✅ База данных успешно восстановлена из дампа!"
echo ""
echo "📌 ВАЖНО: После первой регистрации/входа пользователя все данные"
echo " будут автоматически привязаны к этому пользователю."