UNPKG

create-auth-backend-cli

Version:

CLI to scaffold a Node.js Auth backend with Express, JWT, MongoDB

99 lines (83 loc) 2.57 kB
const User = require("../models/User"); const bcrypt = require("bcryptjs"); const jwt = require("jsonwebtoken"); exports.register = async (req, res) => { try { const { name, email, password, role } = req.body; // 1. Validate required fields if (!name || !email || !password) { return res.status(400).json({ error: "Name, email, and password are required" }); } // 2. Password length check if (password.length < 6) { return res.status(400).json({ error: "Password must be at least 6 characters" }); } // 3. Check if email already exists const existingUser = await User.findOne({ email }); if (existingUser) { return res.status(409).json({ error: "Email already in use" }); } // 4. Hash password const hashedPassword = await bcrypt.hash(password, 10); // 5. Create user const user = await User.create({ name, email, password: hashedPassword, role: role || "user" // default to "user" if not provided }); // 6. Return success (exclude password) res.status(201).json({ message: "User registered successfully", user: { id: user._id, name: user.name, email: user.email, role: user.role, createdAt: user.createdAt } }); } catch (err) { console.error(err); res.status(500).json({ error: "Server error" }); } }; exports.login = async (req, res) => { try { const { email, password } = req.body; // 1. Validate fields if (!email || !password) { return res.status(400).json({ error: "Email and password are required" }); } // 2. Find user const user = await User.findOne({ email }); if (!user) { return res.status(401).json({ error: "Invalid credentials" }); } // 3. Compare password const isMatch = await bcrypt.compare(password, user.password); if (!isMatch) { return res.status(401).json({ error: "Invalid credentials" }); } // 4. Sign JWT with role const token = jwt.sign( { id: user._id, role: user.role }, process.env.JWT_SECRET, { expiresIn: "1d" } ); // 5. Send token + user info res.json({ message: "Login successful", token, user: { id: user._id, name: user.name, email: user.email, role: user.role } }); } catch (err) { console.error(err); res.status(500).json({ error: "Server error" }); } };