taller-ionic/backend/controllers/authController.js
2025-04-24 15:57:53 -04:00

88 lines
2.1 KiB
JavaScript

const { User } = require('../models');
const bcrypt = require('bcryptjs');
// @desc Register a new user
// @route POST /api/auth/register
// @access Public
exports.register = async (req, res) => {
try {
const { name, email, password } = req.body;
// Check if user already exists
const userExists = await User.findOne({ where: { email } });
if (userExists) {
return res.status(400).json({
success: false,
message: 'El usuario ya existe'
});
}
// Create user
const user = await User.create({
name,
email,
password, // Will be hashed by the model hooks
profilePicUrl: '/uploads/default-avatar.jpg',
notificationsEnabled: true
});
// Return user without password
const userResponse = user.toJSON();
delete userResponse.password;
res.status(201).json({
success: true,
user: userResponse
});
} catch (error) {
console.error('Error en register:', error);
res.status(500).json({
success: false,
message: 'Error al registrar usuario',
error: error.message
});
}
};
// @desc Login user
// @route POST /api/auth/login
// @access Public
exports.login = async (req, res) => {
try {
const { email, password } = req.body;
// Check if user exists
const user = await User.findOne({ where: { email } });
if (!user) {
return res.status(401).json({
success: false,
message: 'Credenciales inválidas'
});
}
// Check if password matches
const isMatch = await user.matchPassword(password);
if (!isMatch) {
return res.status(401).json({
success: false,
message: 'Credenciales inválidas'
});
}
// Return user without password
const userResponse = user.toJSON();
delete userResponse.password;
res.status(200).json({
success: true,
user: userResponse
});
} catch (error) {
console.error('Error en login:', error);
res.status(500).json({
success: false,
message: 'Error al iniciar sesión',
error: error.message
});
}
};