v2.0.0: Multi-user authentication with JWT
Some checks failed
Build and Push Docker Image / build-and-push (push) Failing after 16s
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:
@@ -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 " будут автоматически привязаны к этому пользователю."
|
||||
|
||||
|
||||
Reference in New Issue
Block a user