2012-09-05 13 views
19

कैसे सुरक्षित करें मैं नोडजेएस और एक्सप्रेसजेएस (एमवीसी के लिए) के नवीनतम संस्करणों का उपयोग कर रहा हूं।नोडजेएस + एक्सप्रेस: ​​यूआरएल

मैं आमतौर पर उदाहरण के लिए इस तरह मेरे बाकी रास्तों कॉन्फ़िगर,:

app.get('/archive', routes.archive); 

अब मैं चाहता हूँ यूआरएल की मेरी /admin/* सेट सुरक्षित करने की, मेरा मतलब है मैं सिर्फ सरल प्रमाणीकरण की जरूरत है, यह सिर्फ एक मसौदा है।

जब कोई उपयोगकर्ता एक्सेस करने का प्रयास करता है, उदाहरण के लिए, /admin/posts, उसे संबंधित दृश्य और डेटा भेजने से पहले, मैं req.session.authenticated की जांच करता हूं। यदि यह परिभाषित नहीं किया गया है, तो मैं लॉगिन पेज पर रीडायरेक्ट करता हूं।

लॉगिन पृष्ठ का एक सरल सत्यापन फ़ॉर्म है, और एक साइन-इन नियंत्रक विधि: यदि उपयोगकर्ता "सही उपयोगकर्ता" और "सही पासवर्ड" भेजता है तो मैंने सत्र चर सेट किया है और वह प्रमाणीकृत है।

मुझे जो मुश्किल लगता है, या मुझे समझ में नहीं आता है, वास्तव में "फ़िल्टर" कोड, मेरा मतलब है, ऑथ चेक, प्रत्येक/व्यवस्थापक/* पथ कॉल से पहले।

क्या इसका "मिडलवेयर" एक्सप्रेस फ़ंक्शंस के साथ कुछ करना है?

धन्यवाद

उत्तर

59

हाँ, मिडलवेयर बिल्कुल वही है जो आप चाहते हैं। एक मिडलवेयर फ़ंक्शन केवल एक ऐसा फ़ंक्शन है जो किसी भी अन्य एक्सप्रेस रूट हैंडलर की तरह काम करता है, इसे अपने वास्तविक रूट हैंडलर से पहले चलाया जाता है। उदाहरण के लिए, कुछ इस तरह कर सकता है:

function requireLogin(req, res, next) { 
    if (req.session.loggedIn) { 
    next(); // allow the next route to run 
    } else { 
    // require the user to log in 
    res.redirect("/login"); // or render a form, etc. 
    } 
} 

// Automatically apply the `requireLogin` middleware to all 
// routes starting with `/admin` 
app.all("/admin/*", requireLogin, function(req, res, next) { 
    next(); // if the middleware allowed us to get here, 
      // just move on to the next route handler 
}); 

app.get("/admin/posts", function(req, res) { 
    // if we got here, the `app.all` call above has already 
    // ensured that the user is logged in 
}); 

आप जिन मार्गों पर संरक्षित किया जाना है, इसके बजाय /admin/* साथ app.all कॉल का उपयोग करने का चाहते हैं के प्रत्येक करने के लिए एक मध्यस्थ के रूप requireLogin निर्दिष्ट कर सकते हैं, लेकिन यह कर जिस तरह से मैं यहां दिखाता हूं यह सुनिश्चित करता है कि आप इसे /admin से शुरू होने वाले किसी भी पृष्ठ पर गलती से जोड़ना न भूलें।

+1

वाह .... तो स्टैक ओवरफ्लो काम करता है, कभी-कभी! : डी ehehe धन्यवाद, यह वास्तव में मुझे जवाब की तरह का जवाब है। मैं दोपहर में कोशिश करूंगा और सभी काम करता हूं तो अपने उत्कृष्ट जवाब को स्वीकार करूंगा। THX फिर से –

+0

मदद करने में खुशी हुई! अगर आपको इस मुद्दे पर कोई और प्रश्न है तो हमें बताएं!^_^ –

+0

टोकन का उपयोग करने में क्या अंतर है? –

1
ब्रैंडन तरह

, लेकिन आप भी connect मार्ग

app.use('/admin', requireLogin) 
app.use(app.router) 

app.get('/admin/posts', /* middleware */) 
+3

आपका क्या मतलब है? : - \ –

1

एक भी सरल दृष्टिकोण App.js फ़ाइल में निम्न कोड जोड़ने के लिए किया जाएगा जा सकते हैं।

var auth = function(req, res, next) { 

    if(isAdmin) { 

     return next(); 

    } else { 

     return res.status(400) 

    } 
}; 

app.use('/admin', auth, apiDecrement); 

जैसा कि आप देख सकते हैं कि मध्यवर्ती मार्ग से जुड़ा हुआ है। ExpressJS आगे जाने से पहले, यह उस फ़ंक्शन को निष्पादित करता है जिसे आपने दूसरे पैरामीटर के रूप में पारित किया था।

इस समाधान के साथ आप अंतिम उपयोगकर्ता को साइट प्रदर्शित करने से पहले अलग-अलग चेक कर सकते हैं।

बेस्ट।

संबंधित मुद्दे