Session Based Authentication

Session-Based Authentication in Express.js

Express.js এ traditional & secure Session-Based Authentication সিস্টেম ব্যাখ্যা করা হলো সহজ ভাষায়।


🔷 Session-Based Authentication কী?

ওয়েব অ্যাপ্লিকেশনে user যখন login করে, server তার জন্য একটি session তৈরি করে। এই session এ user সম্পর্কিত তথ্য (যেমন userId) store থাকে এবং user যখনই নতুন request পাঠায়, browser একটি session ID cookie পাঠায় যা দিয়ে server user কে চিনে ফেলে।

Session হলো server-side authentication system। Cookies session ID বহন করে, আর server data store করে।

🔷 Session Flow (Step-by-Step)

  • User login → server user verify করে
  • Server session তৈরি করে
  • Server → browser এ sessionID cookie পাঠায়
  • Client প্রতিটি request এ cookie পাঠায়
  • Server cookie দেখে user কে identify করে
Session Authentication Flow

🔷 Install Required Packages

npm install express-session connect-mongo bcryptjs dotenv
    

🔷 Session Setup in Express.js

Session store হিসাবে MongoDB ব্যবহার করা হলো:

const session = require("express-session");
const MongoStore = require("connect-mongo");

app.use(session({
    secret: process.env.SESSION_SECRET,
    resave: false,
    saveUninitialized: false,

    cookie: {
        maxAge: 1000 * 60 * 15, // 15 minutes
        httpOnly: true,
    },

    store: MongoStore.create({
        mongoUrl: process.env.MONGO_URI,
        collectionName: "sessions"
    })
}));
    

🔷 User Login & Create Session

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

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

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

    req.session.user = {
        id: user._id,
        email: user.email
    };

    res.json({ 
        message: "Login successful",
        user: req.session.user 
    });
});
    

🔷 Authentication Middleware

এই middleware দিয়ে protected routes secure রাখা হয়:

const isAuthenticated = (req, res, next) => {
    if (!req.session.user) {
        return res.status(401).json({ message: "Not authenticated" });
    }
    next();
};
    

🔷 Protected Route Example

app.get("/profile", isAuthenticated, (req, res) => {
    res.json({
        message: "User profile data",
        user: req.session.user
    });
});
    

🔷 Logout (Destroy Session)

app.post("/logout", (req, res) => {
    req.session.destroy(() => {
        res.clearCookie("connect.sid");
        res.json({ message: "Logged out successfully" });
    });
});
    

🔷 Session Security Tips

  • httpOnly cookie ব্যবহার করুন
  • Session expiration time কম রাখুন (10–20 min)
  • secure: true (production-এ HTTPS required)
  • Session fixation attack এড়াতে session regeneration করুন
req.session.regenerate((err) => {
    if (err) console.log(err);
});
    

🔷 Session vs JWT: কোনটা কখন ব্যবহার করবেন?

Session JWT
Server stores user data Client stores token
Best for Traditional Web App Best for APIs, Mobile Apps
More secure Scalable but risky if token leaked

🔷 Summary

  • Session Authentication server-side based
  • Cookie session ID বহন করে
  • Traditional websites-এ session সবচেয়ে popular
  • Logout করলে session destroy হয়
  • Session fixation attack এড়াতে regenerate প্রয়োজন

✔ Session-Based Authentication হলো Express.js learning journey-র একটি essential chapter!

👼 Quiz
/

লোড হচ্ছে...

Interview Questions:

1. Session Based Authentication কীভাবে কাজ করে?

Server এ session store করা হয় এবং client এ session id cookie হিসেবে থাকে।

2. JWT ও Session Authentication এর পার্থক্য কী?

JWT stateless, আর Session server-side stateful authentication।