80 lines
4.6 KiB
JavaScript
80 lines
4.6 KiB
JavaScript
![]() |
const User = require('../models/User'); // Импортируем нашу модель пользователя
|
|||
|
// const bcrypt = require('bcryptjs'); // bcryptjs уже используется внутри модели User.js, здесь он напрямую не нужен для регистрации
|
|||
|
// const jwt = require('jsonwebtoken'); // Понадобится позже для генерации токена
|
|||
|
|
|||
|
// @desc Регистрация нового пользователя
|
|||
|
// @route POST /api/auth/register
|
|||
|
// @access Public
|
|||
|
const registerUser = async (req, res, next) => {
|
|||
|
try {
|
|||
|
const { name, email, password, dateOfBirth, gender } = req.body; // Получаем данные из тела запроса
|
|||
|
|
|||
|
// 1. Простая валидация на сервере (дополнительно к валидации Mongoose)
|
|||
|
if (!name || !email || !password) {
|
|||
|
res.status(400); // Bad Request
|
|||
|
// Используем Error, чтобы передать его в наш будущий обработчик ошибок
|
|||
|
throw new Error('Пожалуйста, заполните все обязательные поля: имя, email и пароль.');
|
|||
|
}
|
|||
|
|
|||
|
// 2. Проверка, не существует ли уже пользователь с таким email
|
|||
|
const userExists = await User.findOne({ email: email.toLowerCase() });
|
|||
|
|
|||
|
if (userExists) {
|
|||
|
res.status(400); // Bad Request
|
|||
|
throw new Error('Пользователь с таким email уже существует.');
|
|||
|
}
|
|||
|
|
|||
|
// 3. Создание нового пользователя
|
|||
|
// Пароль будет автоматически хеширован благодаря middleware в модели User.js
|
|||
|
const user = await User.create({
|
|||
|
name,
|
|||
|
email: email.toLowerCase(),
|
|||
|
password, // Передаем пароль как есть, модель позаботится о хешировании
|
|||
|
dateOfBirth, // Эти поля пока опциональны, если их нет в req.body, они будут undefined
|
|||
|
gender, // и не запишутся, если в схеме нет default значения и они не required
|
|||
|
});
|
|||
|
|
|||
|
if (user) {
|
|||
|
// Если пользователь успешно создан
|
|||
|
// TODO: Сгенерировать JWT токен и отправить его клиенту
|
|||
|
|
|||
|
res.status(201).json({ // 201 Created
|
|||
|
_id: user._id,
|
|||
|
name: user.name,
|
|||
|
email: user.email,
|
|||
|
// token: generateToken(user._id) // Раскомментируем, когда будет функция generateToken
|
|||
|
message: 'Пользователь успешно зарегистрирован!' // Временное сообщение
|
|||
|
});
|
|||
|
} else {
|
|||
|
res.status(400); // Bad Request
|
|||
|
throw new Error('Неверные данные пользователя. Не удалось создать пользователя.');
|
|||
|
}
|
|||
|
} catch (error) {
|
|||
|
// Логируем ошибку на сервере для отладки
|
|||
|
console.error('Ошибка при регистрации:', error.message);
|
|||
|
// Если статус не был установлен ранее (например, при ошибке валидации Mongoose)
|
|||
|
if (!res.statusCode || res.statusCode < 400) {
|
|||
|
res.status(400); // По умолчанию Bad Request для ошибок регистрации
|
|||
|
}
|
|||
|
// Передаем ошибку дальше, чтобы ее мог обработать централизованный обработчик ошибок (если он есть)
|
|||
|
// или Express обработает ее по умолчанию.
|
|||
|
// Мы пока будем просто отправлять сообщение ошибки.
|
|||
|
res.json({ message: error.message, stack: process.env.NODE_ENV === 'production' ? null : error.stack });
|
|||
|
// next(error); // Это для централизованного обработчика ошибок, который мы можем добавить позже
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
// TODO: Функция для входа пользователя (loginUser)
|
|||
|
// const loginUser = async (req, res, next) => { ... };
|
|||
|
|
|||
|
// TODO: Функция для получения информации о текущем пользователе (getMe)
|
|||
|
// const getMe = async (req, res, next) => { ... };
|
|||
|
|
|||
|
|
|||
|
// Экспортируем функции контроллера
|
|||
|
module.exports = {
|
|||
|
registerUser,
|
|||
|
// loginUser, // Раскомментируем позже
|
|||
|
// getMe, // Раскомментируем позже
|
|||
|
};
|