Authentication (Login + Register)

Authentication (Login + Register) in Express.js – Full Guide

ওয়েব অ্যাপ্লিকেশনে Authentication একটি গুরুত্বপূর্ণ অংশ। User কে verify করা, login করানো, নিরাপদভাবে password store করা, token generate করা — এগুলো সব Authentication এর অংশ। Express.js ব্যবহার করে খুব সহজেই Login এবং Register সিস্টেম তৈরি করা যায়। এখানে Register, Login, Password Hashing, Validation, এবং Error Handling সহ বিস্তারিত আলোচনা করা হল।


Authentication কী?

Authentication হল কোনো user আসলেই কে এবং সে authorized কিনা তা verify করার প্রক্রিয়া। সাধারণত দুটি অংশ থাকে:

  • Register (Sign Up): User account তৈরি করে
  • Login (Sign In): User সঠিক credentials দিয়ে সিস্টেমে প্রবেশ করে

Authentication এ যা ব্যবহার করা হবে

  • Express.js (Backend Framework)
  • MongoDB + Mongoose (Database)
  • Bcrypt.js (Password Hashing)
  • JSON Web Token – JWT (Authentication Token)
  • dotenv (.env for secure credentials)
Note: Password কখনোই plaintext এ store করা যাবে না। Always hash করে রাখবেন।

Step 1: প্রয়োজনীয় Packages Install

npm install express mongoose bcryptjs jsonwebtoken dotenv

Step 2: Folder Structure

project/
│── models/
│    └── User.js
│── routes/
│    └── authRoute.js
│── server.js
│── .env

Step 3: User Model তৈরি (Mongoose)

const mongoose = require("mongoose");

const userSchema = new mongoose.Schema({
    name: { type: String, required: true },
    email: { type: String, required: true, unique: true },
    password: { type: String, required: true }
});

module.exports = mongoose.model("User", userSchema);

Step 4: Register Route (Sign Up)

Register করার সময়:

  • Email already exists কিনা চেক করতে হবে
  • Password hash করে database এ store করতে হবে
  • User কে response এ success message দিতে হবে
const express = require("express");
const bcrypt = require("bcryptjs");
const User = require("../models/User");
const router = express.Router();

router.post("/register", async (req, res) => {
    const { name, email, password } = req.body;

    try {
        // User exists check
        const existUser = await User.findOne({ email });
        if (existUser) return res.status(400).json({ message: "Email already exists" });

        // Hash password
        const hashedPassword = await bcrypt.hash(password, 10);

        // Create new user
        const user = new User({ name, email, password: hashedPassword });
        await user.save();

        res.json({ message: "Registration Successful", user });

    } catch (error) {
        res.status(500).json({ error: error.message });
    }
});

module.exports = router;

Step 5: Login Route (Sign In)

Login করার সময়:

  • User exists কিনা চেক করতে হবে
  • Password match করতে হবে
  • JWT token generate করতে হবে
const jwt = require("jsonwebtoken");

router.post("/login", async (req, res) => {
    const { email, password } = req.body;

    try {
        // User exists check
        const user = await User.findOne({ email });
        if (!user) return res.status(400).json({ message: "User not found" });

        // Password verify
        const isMatch = await bcrypt.compare(password, user.password);
        if (!isMatch) return res.status(400).json({ message: "Incorrect password" });

        // JWT generate
        const token = jwt.sign(
            { id: user._id, email: user.email },
            process.env.JWT_SECRET,
            { expiresIn: "1d" }
        );

        res.json({
            message: "Login Successful",
            token
        });

    } catch (error) {
        res.status(500).json({ error: error.message });
    }
});

Step 6: Protected Route 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, process.env.JWT_SECRET);
        req.user = verified;
        next();

    } catch (error) {
        res.status(400).json({ message: "Invalid Token" });
    }
};

Step 7: Protected API Example

router.get("/profile", authMiddleware, (req, res) => {
    res.json({ message: "Welcome to your profile", user: req.user });
});

Step 8: server.js Setup

const express = require("express");
const mongoose = require("mongoose");
const authRoute = require("./routes/authRoute");
require("dotenv").config();

const app = express();
app.use(express.json());

// DB connect
mongoose.connect(process.env.MONGO_URL)
    .then(() => console.log("DB Connected"))
    .catch(err => console.log(err));

// Routes
app.use("/api/auth", authRoute);

app.listen(5000, () => console.log("Server running on port 5000"));

Authentication Best Practices

  • Password always hash করুন (bcrypt ব্যবহার করুন)
  • JWT secret কখনোই code এ লিখবেন না → .env এ রাখুন
  • Token এর expiry রাখুন (like 1d, 2h)
  • Login attempts limit করুন (Brute-force attack প্রতিরোধ)
  • HTTPS ব্যবহার করুন production এ

Conclusion

Express.js দিয়ে Authentication system তৈরি করা খুবই সহজ এবং flexible। Register, Login, Password Hashing, JWT Token সহ পুরো সিস্টেম industry-standard practice অনুযায়ী build করা হয়েছে। এই system আপনি সহজেই আপনার project, admin panel বা full-stack application এ integrate করতে পারবেন।

👼 Quiz
/

লোড হচ্ছে...

Interview Questions:

1. Authentication বলতে কী বোঝায়?

Authentication হলো ইউজার কে সে সত্যিই কে দাবি করছে তা যাচাই করার প্রক্রিয়া।

2. Login ও Register প্রসেসে কী কী ধাপ থাকে?

Register এ ডাটা ভ্যালিডেশন, password hash এবং save করা হয়; Login এ credential যাচাই করা হয়।