Простое приложение на Next.js для отправки одноразового кода подтверждения на email и проверки этого кода.
Приложение позволяет:
- отправлять 4-значный код на указанный email
- хранить хеш кода в базе данных PostgreSQL
- проверять код и помечать email как подтверждённый
- сохранять пользователя в таблице
Userпри успешной верификации
- Next.js 16
- React 19
- TypeScript
- Prisma ORM
- PostgreSQL
- Nodemailer
- bcrypt
app/page.tsx— интерфейс отправки email и ввода кодаapp/api/auth/send-code/route.ts— API для отправки кодаapp/api/auth/verify-code/route.ts— API для проверки кодаlib/mailer.ts— конфигурация SMTP-транспортаlib/code.ts— генерация 4-значного кодаprisma/schema.prisma— схема базы данных
- Клонируйте репозиторий:
git clone https://github.com/helliong/email-verify-app.git
cd email-verify-app- Установите зависимости:
npm install- Создайте файл
.envна основе переменных ниже.
Создайте файл .env в корне проекта и добавьте:
DATABASE_URL="postgresql://USER:PASSWORD@HOST:PORT/DATABASE"
SMTP_HOST=smtp.example.com
SMTP_PORT=587
SMTP_USER=your_smtp_user
SMTP_PASS=your_smtp_password
EMAIL_FROM="Your App <no-reply@example.com>"Обратите внимание, что приложение использует PostgreSQL в
prisma/schema.prisma.
- Создайте базу данных PostgreSQL.
- Выполните миграции Prisma:
npx prisma migrate dev --name init- Сгенерируйте Prisma Client (при необходимости):
npx prisma generatenpm run devОткройте http://localhost:3000 в браузере.
- Пользователь вводит email.
- Запрос
POST /api/auth/send-codeгенерирует код и отправляет email. - Пользователь вводит полученный код.
- Запрос
POST /api/auth/verify-codeпроверяет код, отмечает запись как использованную и создаёт/обновляет пользователя.
- Код действителен 10 минут.
- Хранится хеш кода (
bcrypt), а не сам код. - После успешной проверки
User.emailVerifiedустанавливается вtrue.
npm run dev— запуск в режиме разработкиnpm run build— сборка приложенияnpm run start— запуск в productionnpm run lint— проверка ESLint
- добавить авторизацию через сессии или JWT
- добавить повторную отправку кода
- ограничить число попыток ввода
- сделать стилизацию с Tailwind CSS или другим UI-фреймворком
Автор: helliong