๐ Authentication (Login Signup with JWT
Now you learn how real apps handle users and security.
๐ Every real app needs:
โข Signup (register)
โข Login (authenticate)
โข Protected routes
๐ง What is Authentication
Authentication = verifying who the user is
Example:
โข Login with email + password
โข System checks credentials
โข Grants access
๐ What is JWT
JWT = JSON Web Token
๐ A secure token sent after login
๐ Used to identify user in future requests
Simple flow:
1๏ธโฃ User logs in
2๏ธโฃ Server creates token
3๏ธโฃ Token sent to frontend
4๏ธโฃ Frontend sends token in every request
๐ฆ Install Required Packages
npm install jsonwebtoken bcryptjs
โข jsonwebtoken โ create token
โข bcryptjs โ hash passwords
๐งฉ Step 1 โ User Schema
const mongoose = require("mongoose");
const userSchema = new mongoose.Schema({
email: String,
password: String
});
const User = mongoose.model("User", userSchema);
๐ Step 2 โ Signup API
const bcrypt = require("bcryptjs");
app.post("/signup", async (req, res) => {
const hashedPassword = await bcrypt.hash(req.body.password, 10);
const user = new User({
email: req.body.email,
password: hashedPassword
});
await user.save();
res.json({ message: "User registered" });
});
โ Password is stored securely
โ Never store plain text password
๐ Step 3 โ Login API
const jwt = require("jsonwebtoken");
app.post("/login", async (req, res) => {
const user = await User.findOne({ email: req.body.email });
if (!user) {
return res.status(400).json({ message: "User not found" });
}
const isMatch = await bcrypt.compare(req.body.password, user.password);
if (!isMatch) {
return res.status(400).json({ message: "Invalid credentials" });
}
const token = jwt.sign(
{ userId: user._id },
"secretkey",
{ expiresIn: "1h" }
);
res.json({ token });
});
โ Validates user
โ Generates token
๐ก๏ธ Step 4 โ Protect Routes (Middleware)
const authMiddleware = (req, res, next) => {
const token = req.headers.authorization;
if (!token) {
return res.status(401).json({ message: "Access denied" });
}
try {
const verified = jwt.verify(token, "secretkey");
req.user = verified;
next();
} catch {
res.status(400).json({ message: "Invalid token" });
}
};
๐ Step 5 โ Use Protected Route
app.get("/profile", authMiddleware, (req, res) => {
res.json({ message: "Welcome user", user: req.user });
});
โ Only logged-in users can access
๐ Full Authentication Flow
Signup โ Store user
Login โ Verify user โ Generate token
Frontend stores token
Frontend sends token in requests
Backend verifies token
โ ๏ธ Common Beginner Mistakes
โข Storing plain passwords โ
โข Not hashing passwords โ
โข Exposing secret key โ
โข Not verifying token โ
๐งช Mini Practice Task
Build authentication system:
โข POST /signup
โข POST /login
โข GET /dashboard (protected route)
โข Use JWT middleware
Double Tap โฅ๏ธ For More
Post #3599
5.09K
- โค 27
- ๐ 1