Welcome, in this video we will see a Complete User Login Route with Functionality in one Video in our MERN Application.
One thing is very important that is
if (user) {
res.status(200).json({
message: "Login Successful",
token: await userExist.generateToken(),
userId: userExist._id.toString(),
});
const User = require("../models/auth-model");
const bcrypt = require("bcryptjs");
// *-------------------
// Home Logic
// *-------------------
const home = async (req, res) => {
try {
res.status(200).json({ msg: "Welcome to our home page" });
} catch (error) {
console.log(error);
}
};
// *-------------------------------
//* User Registration Logic π
// *-------------------------------
// 1. Get Registration Data: π€ Retrieve user data (username, email, password).
// 2. Check Email Existence: π Check if the email is already registered.
// 3. Hash Password: π Securely hash the password.
// 4. Create User: π Create a new user with hashed password.
// 5. Save to DB: πΎ Save user data to the database.
// 6. Respond: β
Respond with "Registration Successful" or handle errors.
const register = async (req, res) => {
try {
// const data = req.body;
console.log(req.body);
const { username, email, phone, password } = req.body;
const userExist = await User.findOne({ email: email });
if (userExist) {
return res.status(400).json({ msg: "email already exists" });
}
const userCreated = await User.create({ username, email, phone, password });
// res.status(201).json({ message: "User registered successfully" });
res.status(201).json({
msg: "Registration Successful",
token: await userCreated.generateToken(),
userId: userCreated._id.toString(),
});
} catch (error) {
res.status(500).json({ message: "Internal server error" });
}
};
// *-------------------------------
//* User Login Logic π
// *-------------------------------
const login = async (req, res) => {
try {
const { email, password } = req.body;
const userExist = await User.findOne({ email });
if (!userExist) {
return res.status(400).json({ message: "Invalid credentials" });
}
// const user = await bcrypt.compare(password, userExist.password);
const isPasswordValid = await userExist.comparePassword(password);
if (isPasswordValid) {
res.status(200).json({
message: "Login Successful",
token: await userExist.generateToken(),
userId: userExist._id.toString(),
});
} else {
res.status(401).json({ message: "Invalid email or passord " });
}
} catch (error) {
res.status(500).json({ message: "Internal server error" });
}
};
module.exports = { home, register, login };
auth-model.js
// comparePassword
userSchema.methods.comparePassword = async function (password) {
return bcrypt.compare(password, this.password);
};
auth-route.js
const express = require("express");
const router = express.Router();
const authControllers = require("../controllers/auth-controller");
router.route("/").get(authControllers.home);
router.route("/register").post(authControllers.register);
router.route("/login").post(authControllers.login);
module.exports = router;