Автоматическое создание админ пользователя
Описание
Админ пользователь создается автоматически при первом запуске миграции базы данных. Учетные данные берутся из Doppler.
Настройка
1. Добавьте переменные в Doppler
Для каждой конфигурации (local, dev, prod) добавьте:
bash
ADMIN_EMAIL=admin@yourdomain.com
ADMIN_PASSWORD=your-secure-password2. Запустите миграции
bash
npm run migration:runКак это работает
- Чтение environment:
environment.tsчитает переменные изprocess.envпри запуске - Запуск миграции: InitialSchema миграция импортирует
environment.ts - Хеширование пароля: Пароль хешируется с помощью bcryptjs (10 раундов)
- Создание пользователя: Админ вставляется в таблицу users с
verification_status = 'verified' - Идемпотентность:
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
Админ не создается
Проверьте, что переменные добавлены в Doppler:
bashdoppler secrets get ADMIN_EMAIL --config local doppler secrets get ADMIN_PASSWORD --config localПроверьте, что
ADMIN_EMAILиADMIN_PASSWORDустановлены в переменных окружения (Doppler или.env)Проверьте логи миграции на наличие ошибок
Нужно изменить email или пароль админа
- Обновите переменные
ADMIN_EMAIL/ADMIN_PASSWORDв Doppler - Удалите существующего админа из БД (если нужно):sql
DELETE FROM users WHERE email = 'old-admin@example.com'; - Запустите миграцию заново или используйте UPDATE:sql
UPDATE users SET email = 'new-admin@example.com', password = 'new-hashed-password' WHERE email = 'old-admin@example.com';
Рекомендации
- Production: Используйте сильный пароль (минимум 16 символов, случайный)
- Rotation: Регулярно меняйте пароль админа
- Monitoring: Логируйте входы админа в систему
- 2FA: Рассмотрите добавление двухфакторной аутентификации для админа