আমি মূলত একই জিনিস খুঁজছিলাম। বিশেষত, আমি নিম্নলিখিতগুলি চেয়েছিলাম:
- এক্সপ্রেস.জেএস ব্যবহার করতে, যা কানেক্টের মিডওয়্যারের সামর্থ্যকে মোড় দেয়
- "ফর্ম ভিত্তিক" প্রমাণীকরণ
- কোন রুটগুলিকে অনুমোদন দেওয়া হয়েছে তার উপর দানাদার নিয়ন্ত্রণ
- ব্যবহারকারী / পাসওয়ার্ডগুলির জন্য একটি ডাটাবেস ব্যাক-এন্ড
- সেশন ব্যবহার করুন
আমি যা করে শেষ করেছি তা হ'ল আমার নিজস্ব মিডলওয়্যার ফাংশন তৈরি করা check_auth
যা আমি প্রত্যয়িত প্রতিটি রুটের পক্ষে যুক্তি হিসাবে পাস করি। check_auth
কেবলমাত্র অধিবেশনটি পরীক্ষা করে এবং ব্যবহারকারী যদি লগইন না করে থাকে তবে তাদের লগইন পৃষ্ঠায় পুনঃনির্দেশ করুন, যেমন:
function check_auth(req, res, next) {
// if the user isn't logged in, redirect them to a login page
if(!req.session.login) {
res.redirect("/login");
return; // the buck stops here... we do not call next(), because
// we don't want to proceed; instead we want to show a login page
}
// the user is logged in, so call next()
next();
}
তারপরে প্রতিটি রুটের জন্য, আমি নিশ্চিত করি যে এই ফাংশনটি মিডওয়্যারের হিসাবে পাস হয়েছে। উদাহরণ স্বরূপ:
app.get('/tasks', check_auth, function(req, res) {
// snip
});
শেষ অবধি, আমাদের লগইন প্রক্রিয়াটি আসলে পরিচালনা করতে হবে। এটি সোজা:
app.get('/login', function(req, res) {
res.render("login", {layout:false});
});
app.post('/login', function(req, res) {
// here, I'm using mongoose.js to search for the user in mongodb
var user_query = UserModel.findOne({email:req.body.email}, function(err, user){
if(err) {
res.render("login", {layout:false, locals:{ error:err } });
return;
}
if(!user || user.password != req.body.password) {
res.render("login",
{layout:false,
locals:{ error:"Invalid login!", email:req.body.email }
}
);
} else {
// successful login; store the session info
req.session.login = req.body.email;
res.redirect("/");
}
});
});
যে কোনও হারে, এই পদ্ধতির বেশিরভাগ ক্ষেত্রে নমনীয় এবং সহজ হতে ডিজাইন করা হয়েছিল। আমি নিশ্চিত এটির উন্নতি করার অনেকগুলি উপায় রয়েছে। আপনার যদি কিছু থাকে তবে আমি আপনার প্রতিক্রিয়াটি খুব পছন্দ করব।
সম্পাদনা: এটি একটি সরলীকৃত উদাহরণ। কোনও প্রোডাকশন সিস্টেমে আপনি কখনই সরল পাঠ্যে পাসওয়ার্ড সংরক্ষণ এবং তুলনা করতে চাইবেন না। একজন মন্তব্যকারী উল্লেখ করার সাথে সাথে এমন লিবস রয়েছে যা পাসওয়ার্ড সুরক্ষা পরিচালনা করতে সহায়তা করতে পারে।
omniauth
(রেল) বা পাইথনের সমতুল্যsocial-auth
। পিএইচপি (এবং অন্যান্য সাধারণ ওয়েব সার্ভার ভাষা) ব্যবহারকারীদের পাশাপাশি তাদের সমতুল্য যোগ করতে নির্দ্বিধায় উচিত।