Passport.js হল একটি অত্যন্ত জনপ্রিয় authentication middleware যা ExpressJS অ্যাপ্লিকেশনে সহজে ব্যবহার করা যায়। এটি বিভিন্ন ধরনের অথেনটিকেশন স্ট্র্যাটেজি (যেমন: লোকাল, ফেইসবুক, গুগল, টুইটার, ইত্যাদি) সমর্থন করে এবং খুবই মডুলার ও কনফিগারেবল। এখানে আমরা Passport.js ব্যবহার করে একটি সিম্পল অথেনটিকেশন সিস্টেম সেটআপ করার পদ্ধতি দেখব, যেখানে ইউজারনেম এবং পাসওয়ার্ড ব্যবহার করে লগইন করা যাবে।
১. Passport.js কী?
Passport.js একটি ছোট, নিরপেক্ষ, এবং সহজ অথেনটিকেশন মিডলওয়্যার যা একাধিক অথেনটিকেশন স্ট্র্যাটেজি দিয়ে কাজ করে। এটি ইউজারের পরিচয় যাচাই করতে সাহায্য করে, এবং একবার যাচাই হয়ে গেলে সেশন ম্যানেজমেন্টের জন্য কাজ করে।
২. Passport.js ইনস্টলেশন
প্রথমে, আপনার অ্যাপ্লিকেশনে Passport.js এবং এর কিছু প্রয়োজনীয় প্যাকেজ ইনস্টল করতে হবে।
npm install passport passport-local express-session
passport: Passport.js এর মূল লাইব্রেরি।passport-local: লোকাল অথেনটিকেশন স্ট্র্যাটেজি (যেমন: ইউজারনেম এবং পাসওয়ার্ড) ব্যবহারের জন্য।express-session: সেশন ব্যবস্থাপনা করতে ব্যবহৃত হবে।
৩. ExpressJS অ্যাপ্লিকেশন তৈরি করা
নতুন একটি ExpressJS অ্যাপ্লিকেশন তৈরি করুন এবং Passport.js ব্যবহার করার জন্য প্রয়োজনীয় কনফিগারেশন সেট করুন।
app.js ফাইল
const express = require('express');
const passport = require('passport');
const session = require('express-session');
const LocalStrategy = require('passport-local').Strategy;
const app = express();
const port = 3000;
// Dummy ইউজার (ডেটাবেসের পরিবর্তে এটি মেমোরিতে থাকবে)
const users = [
{ id: 1, username: 'testuser', password: 'password123' }
];
// Express-session সেটআপ
app.use(session({
secret: 'your-secret-key',
resave: false,
saveUninitialized: false
}));
// Passport.js সেটআপ
passport.use(new LocalStrategy((username, password, done) => {
// Dummy ইউজারের ভ্যালিডেশন
const user = users.find(u => u.username === username);
if (!user) {
return done(null, false, { message: 'Incorrect username.' });
}
if (user.password !== password) {
return done(null, false, { message: 'Incorrect password.' });
}
return done(null, user);
}));
passport.serializeUser((user, done) => {
done(null, user.id);
});
passport.deserializeUser((id, done) => {
const user = users.find(u => u.id === id);
done(null, user);
});
// Middleware
app.use(passport.initialize());
app.use(passport.session());
// ExpressJS JSON middleware (POST ডেটা পার্স করতে)
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
// লগিন পেজ রাউট
app.get('/login', (req, res) => {
res.send('<form action="/login" method="post"> <input type="text" name="username" placeholder="Username"> <input type="password" name="password" placeholder="Password"> <button type="submit">Login</button> </form>');
});
// POST রিকোয়েস্টে লগিন রাউট
app.post('/login', passport.authenticate('local', {
successRedirect: '/dashboard',
failureRedirect: '/login',
failureFlash: false
}));
// ড্যাশবোর্ড (অথেনটিকেটেড ইউজারের জন্য)
app.get('/dashboard', (req, res) => {
if (!req.isAuthenticated()) {
return res.redirect('/login');
}
res.send(`Welcome ${req.user.username} to your dashboard!`);
});
// লগ আউট রাউট
app.get('/logout', (req, res) => {
req.logout((err) => {
if (err) return next(err);
res.redirect('/login');
});
});
// সার্ভার শুরু
app.listen(port, () => {
console.log(`Server running at http://localhost:${port}`);
});
৪. কোড ব্যাখ্যা
express-session: সেশন ব্যবস্থাপনা করে, যাতে লগইন করার পর ইউজারকে সেশন ধরে রাখা যায়।passport-local: লোকাল অথেনটিকেশন স্ট্র্যাটেজি ব্যবহার করা হয়েছে, যা ইউজারনেম এবং পাসওয়ার্ডের মাধ্যমে লগইন প্রক্রিয়া পরিচালনা করে।passport.serializeUser()এবংpassport.deserializeUser(): লগইন হওয়ার পরে ইউজারের তথ্য সেশন-এর মধ্যে সংরক্ষিত হয়, এবং সেশন থেকে আবার ইউজারের তথ্য পাওয়া যায়।passport.authenticate(): এটি ব্যবহার করা হয় POST রিকোয়েস্টে ইউজারের তথ্য যাচাই করতে এবং সফল হলে রিডিরেক্ট করতে।/dashboard: এই পৃষ্ঠাটি শুধুমাত্র অথেনটিকেটেড (লগইন করা) ইউজারদের জন্য অ্যাক্সেসযোগ্য।
৫. লগইন প্রক্রিয়া
/loginরাউটের মাধ্যমে ইউজার লগইন পেজে যেতে পারে, যেখানে ইউজারনেম এবং পাসওয়ার্ড ইনপুট করতে হবে।- POST রিকোয়েস্টের মাধ্যমে ইউজারনেম এবং পাসওয়ার্ড পাঠানো হলে, Passport.js তা যাচাই করবে।
- সফল হলে, ইউজারকে /dashboard পৃষ্ঠায় রিডিরেক্ট করা হবে, যেখানে ইউজারকে স্বাগত জানানো হবে।
- লগইন ব্যর্থ হলে, ইউজারকে আবার /login পৃষ্ঠায় রিডিরেক্ট করা হবে।
৬. সেশন ব্যবস্থাপনা
একবার ইউজার লগইন হলে, সেশন ব্যবহার করে ইউজারের পরিচয় সুরক্ষিত রাখা হয়। সেশন-এর মাধ্যমে ইউজারের তথ্য (যেমন ইউজারনেম) অন্যান্য রাউটেও অ্যাক্সেস করা সম্ভব।
ড্যাশবোর্ডে ইউজারের তথ্য প্রদর্শন:
res.send(`Welcome ${req.user.username} to your dashboard!`);
এখানে, req.user সেশনে থাকা ইউজারের তথ্য ধারণ করে।
৭. লগ আউট প্রক্রিয়া
লগ আউটের জন্য একটি রাউট (/logout) তৈরি করা হয়েছে, যা ইউজারকে লগ আউট করার পর লগইন পৃষ্ঠায় রিডিরেক্ট করবে:
app.get('/logout', (req, res) => {
req.logout((err) => {
if (err) return next(err);
res.redirect('/login');
});
});
এই রাউটটি req.logout() ফাংশন ব্যবহার করে ইউজারের সেশন মুছে ফেলে এবং ইউজারকে লগইন পৃষ্ঠায় রিডিরেক্ট করে।
৮. সারাংশ
Passport.js ExpressJS অ্যাপ্লিকেশনে সহজেই অথেনটিকেশন প্রক্রিয়া যোগ করার একটি শক্তিশালী ও মডুলার উপায়। আপনি passport-local স্ট্র্যাটেজি ব্যবহার করে ইউজারনেম এবং পাসওয়ার্ডের মাধ্যমে লগইন ব্যবস্থা তৈরি করতে পারেন। Passport.js ব্যবহার করলে, আপনি বিভিন্ন ধরনের অথেনটিকেশন স্ট্র্যাটেজি সহজেই অ্যাড করতে পারবেন এবং সেশন ব্যবস্থাপনা পরিচালনা করতে পারবেন।
এই উদাহরণে আমরা একটি সিম্পল ইউজারনেম/পাসওয়ার্ড ভিত্তিক অথেনটিকেশন সিস্টেম তৈরি করেছি। বাস্তব জীবনের প্রোজেক্টে এটি আরও উন্নত করতে আরও সুরক্ষা (যেমন, পাসওয়ার্ড হ্যাশিং, CORS পলিসি, এবং ফ্ল্যাশ মেসেজ) যোগ করা যেতে পারে।
Read more