UNPKG

ajinkya-mhetre-mern

Version:

A MERN starter with frontend and backend folders

94 lines (81 loc) 2.27 kB
// ===== 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 };