Mini-CRUD-app/controllers/authController.js
2025-06-03 11:51:54 +05:30

59 lines
1.5 KiB
JavaScript

const User = require("../models/User");
const jwt = require("jsonwebtoken");
const generateToken = (id) => {
return jwt.sign({ id }, process.env.JWT_SECRET, { expiresIn: "1h" });
};
//Register
const registerUser = async (req, res) => {
const { username, email, password } = req.body;
try {
const userExists = await User.findOne({ email });
if (userExists)
return res.status(400).json({ message: "User already exists" });
const user = await User.create({ username, email, password });
res.status(201).json({
_id: user._id,
username: user.username,
email: user.email,
token: generateToken(user._id),
});
} catch (error) {
console.error("Error in registerUser:", error.message);
res.status(500).json({ message: "Server error" });
}
};
//Login
const loginUser = async (req, res) => {
const { email, password } = req.body;
try {
const user = await User.findOne({ email });
if (!user) return res.status(400).json({ message: "Invalid credentials" });
const isMatch = await user.matchPassword(password);
if (!isMatch)
return res.status(400).json({ message: "Invalid credentials" });
res.status(200).json({
_id: user._id,
username: user.username,
email: user.email,
token: generateToken(user._id),
message: "success",
});
} catch (error) {
res.status(500).json({ message: "Server error" });
}
};
const getProfile = async (req, res) => {
res.json(req.user);
};
module.exports = { registerUser, loginUser, getProfile };