Header Ads

Header ADS

Work Flow of Authentication : passport-local

 


চলো ধাপে ধাপে flow টা দেখি (Work Flow of Authentication : passport-local):


🧠 1. ইউজার Login Form পূরণ করে

<form method="POST" action="/login">
<input type="text" name="username"> <input type="password" name="password"> <button>Login</button>
</form>

🧾 2. /login route এ POST request যায়

userRoute.post('/login', passport.authenticate('local', {

failureRedirect: '/login', successRedirect: '/profile'


}) );

🔐 3. Passport LocalStrategy চলে


passport.use(new LocalStrategy(async (username, password, done) => {
// 1️⃣ DB থেকে ইউজার খোঁজে // 2️⃣ bcrypt দিয়ে পাসওয়ার্ড মিলায় // 3️⃣ সব ঠিক থাকলে `done(null, user)` দেয়
}));

🧠 4. যদি সফল হয় → serializeUser() চলে

passport.serializeUser((user, done) => {
done(null, user.id); // ইউজারের MongoDB ID session-এ store করে

});

এটা একটা session object এর মত হয়:


{ "passport": { "user": "660dfc288cd4e8d21c7ad8e4" } }

🍪 5. Server ইউজারের ব্রাউজারে একটি Cookie পাঠায় (Set-Cookie)

এই Cookie তে session ID থাকে। যেমন:

connect.sid = s%3A4pJSkf....; Path=/;

🧾 6. এরপর প্রতিটা Request এ ব্রাউজার Cookie সহ server এ যায়


GET /profile Cookie: connect.sid=s%3A4pJSkf...


🔍 7. Server Cookie দেখে session খুঁজে পায় → deserializeUser() চলে


passport.deserializeUser(async (id, done) => {
let user = await userCollection.findById(id); done(null, user); // এটা req.user এর মধ্যে বসে
});

🔁 8. এখন req.user ব্যবহার করে তুমি যেকোনো protected route access করতে পারো


app.get('/profile', (req, res) => {
if(req.isAuthenticated()){ res.render("profile", { user: req.user }); } else { res.redirect("/login"); }
});



Flow Summary (Diagram Text Format):



Powered by Blogger.