Skip to content

Автоматическое создание админ пользователя

Описание

Админ пользователь создается автоматически при первом запуске миграции базы данных. Учетные данные берутся из Doppler.

Настройка

1. Добавьте переменные в Doppler

Для каждой конфигурации (local, dev, prod) добавьте:

bash
ADMIN_EMAIL=admin@yourdomain.com
ADMIN_PASSWORD=your-secure-password

2. Запустите миграции

bash
npm run migration:run

Как это работает

  1. Чтение environment: environment.ts читает переменные из process.env при запуске
  2. Запуск миграции: InitialSchema миграция импортирует environment.ts
  3. Хеширование пароля: Пароль хешируется с помощью bcryptjs (10 раундов)
  4. Создание пользователя: Админ вставляется в таблицу users с verification_status = 'verified'
  5. Идемпотентность: ON CONFLICT DO NOTHING предотвращает дублирование при повторном запуске

Структура environment

typescript
export const environment = {
	// ... другие поля
	admin: {
		email: "admin@yourdomain.com",
		password: "secure-password"
	}
};

Миграция

Файл: src/migrations/1000000000000-InitialSchema.ts

typescript
// Создание админ пользователя
const hashedPassword = await bcryptjs.hash(environment.admin.password, 10);

await queryRunner.query(
	`
  INSERT INTO "users" (email, password, verification_status)
  VALUES ($1, $2, 'verified')
  ON CONFLICT (email) DO NOTHING
`,
	[environment.admin.email, hashedPassword]
);

Безопасность

  • ✅ Пароль хешируется перед сохранением в БД
  • ✅ Учетные данные хранятся в Doppler (не в коде)
  • ✅ Админ создается с подтвержденным статусом (verified)
  • ✅ Идемпотентная операция (можно запускать повторно)

Использование

После создания админ может войти через API:

bash
POST /api/auth/sign-in
{
  "email": "admin@yourdomain.com",
  "password": "your-secure-password"
}

Troubleshooting

Админ не создается

  1. Проверьте, что переменные добавлены в Doppler:

    bash
    doppler secrets get ADMIN_EMAIL --config local
    doppler secrets get ADMIN_PASSWORD --config local
  2. Проверьте, что ADMIN_EMAIL и ADMIN_PASSWORD установлены в переменных окружения (Doppler или .env)

  3. Проверьте логи миграции на наличие ошибок

Нужно изменить email или пароль админа

  1. Обновите переменные ADMIN_EMAIL / ADMIN_PASSWORD в Doppler
  2. Удалите существующего админа из БД (если нужно):
    sql
    DELETE FROM users WHERE email = 'old-admin@example.com';
  3. Запустите миграцию заново или используйте UPDATE:
    sql
    UPDATE users
    SET email = 'new-admin@example.com',
        password = 'new-hashed-password'
    WHERE email = 'old-admin@example.com';

Рекомендации

  1. Production: Используйте сильный пароль (минимум 16 символов, случайный)
  2. Rotation: Регулярно меняйте пароль админа
  3. Monitoring: Логируйте входы админа в систему
  4. 2FA: Рассмотрите добавление двухфакторной аутентификации для админа