ajinkya-mhetre-mern
Version:
A MERN starter with frontend and backend folders
94 lines (81 loc) • 2.27 kB
JavaScript
// ===== src/controllers/authController.js =====
const jwt = require('jsonwebtoken');
const User = require('../models/User');
const generateToken = (id) => {
return jwt.sign({ id }, process.env.JWT_SECRET, {
expiresIn: process.env.JWT_EXPIRE
});
};
const register = async (req, res) => {
try {
const { name, email, password, phone, role, address, farmDetails } = req.body;
const existingUser = await User.findOne({ email });
if (existingUser) {
return res.status(400).json({ message: 'User already exists' });
}
const userData = {
name,
email,
password,
phone,
role,
address
};
if (role === 'farmer' && farmDetails) {
userData.farmDetails = farmDetails;
}
const user = await User.create(userData);
const token = generateToken(user._id);
res.status(201).json({
success: true,
message: role === 'farmer'
? 'Registration successful. Account pending verification.'
: 'Registration successful',
token,
user: {
id: user._id,
name: user.name,
email: user.email,
role: user.role,
isVerified: user.isVerified
}
});
} catch (error) {
res.status(500).json({ message: error.message });
}
};
const login = async (req, res) => {
try {
const { email, password } = req.body;
const user = await User.findOne({ email });
if (!user || !(await user.comparePassword(password))) {
return res.status(401).json({ message: 'Invalid credentials' });
}
const token = generateToken(user._id);
res.json({
success: true,
message: 'Login successful',
token,
user: {
id: user._id,
name: user.name,
email: user.email,
role: user.role,
isVerified: user.isVerified
}
});
} catch (error) {
res.status(500).json({ message: error.message });
}
};
const getProfile = async (req, res) => {
try {
res.json({
success: true,
user: req.user
});
} catch (error) {
res.status(500).json({ message: error.message });
}
};
module.exports = { register, login, getProfile };