मैं मूल रूप से उसी चीज की तलाश में था। विशेष रूप से, मैं निम्नलिखित चाहता था:
- एक्सप्रेस.जेएस का उपयोग करने के लिए, जो कनेक्ट की मिडलवेयर क्षमता को लपेटता है
- "फॉर्म आधारित" प्रमाणीकरण
- कौन से मार्गों को प्रमाणित किया जाता है इस पर नियंत्रण
- उपयोगकर्ताओं / पासवर्ड के लिए एक डेटाबेस बैक-एंड
- सत्र का उपयोग करें
मैंने जो कुछ किया वह अपना मिडलवेयर फंक्शन बना रहा था, 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("/");
}
});
});
किसी भी दर पर, इस दृष्टिकोण को ज्यादातर लचीला और सरल बनाया गया था। मुझे यकीन है कि इसमें सुधार करने के कई तरीके हैं। यदि आपके पास कोई है, तो मुझे आपकी प्रतिक्रिया बहुत पसंद आएगी।
EDIT: यह एक सरलीकृत उदाहरण है। उत्पादन प्रणाली में, आप कभी भी सादे पाठ में पासवर्डों को संग्रहीत और तुलना नहीं करना चाहेंगे। एक टिप्पणीकार बताते हैं, ऐसे लिबास हैं जो पासवर्ड सुरक्षा को प्रबंधित करने में मदद कर सकते हैं।
omniauth
(रेल) या अजगर के बराबरsocial-auth
। PHP (और अन्य सामान्य वेब सर्वर भाषाओं) को उपयोगकर्ताओं को अपने समकक्ष जोड़ने के लिए स्वतंत्र महसूस करना चाहिए।