2014-09-01 5 views
10

मैं एक्सप्रेस 4 का उपयोग कर रहा है, जहां मैं एक मार्ग passport.js द्वारा संरक्षित, इस तरह है:एक्सप्रेस 4 राउटर पर कुछ मार्गों को प्रमाणीकृत करने का बेहतर तरीका क्या है?

var media = require('express').Router(); 

media.get('/', function(req, res) { 
    // provide results from db 
}); 

media.post('/', passport.authenticate('bearer'), function(req, res) { 
    // This route is auth protected 
}); 

तो - संग्रह मार्गों (अधिकतर) मेरे लिए संरक्षित किया जाना चाहिए नहीं किया जाएगा और/अद्यतन रूट बनाने चाहिए । लेकिन इसके लिए मुझे अपनी सभी रूट फाइलों में पासपोर्ट पास करने की आवश्यकता है (मेरे पास अभी तक 7 है), फिर उनमें से कुछ को मिडलवेयर के रूप में जोड़ने के लिए।

मैं संस्करण है जहाँ आप कुछ इस तरह कर सकते हैं की तरह है:

var router = require('./my-router'); 
app.use('/api/route', passport.authenticate('bearer')); 
app.use('/api/route', router); 

लेकिन इस सभी मेरी मार्गों पर प्रमाणन की आवश्यकता होगी।

क्या पासपोर्ट पास करने के लिए एक बेहतर तरीका है?

उत्तर

26

आप अपने राउटर को सुरक्षित/असुरक्षित में विभाजित कर सकते हैं और संरक्षित मार्गों पर मिडलवेयर को कॉल कर सकते हैं।

var express = require('express'), 
    media = express.Router(), 
    mediaProtected = express.Router(); 

media.get('/', function(req, res) { 
    // provide results from db 
}); 

mediaProtected.post('/', function(req, res) { 
    // This route is auth protected 
}); 

module.exports = { 
    protected: mediaProtected, 
    unprotected: media 
}; 

और फिर आप

var router = require('./my-router'); 
app.use('/api/route', passport.authenticate('bearer'), router.protected); 
app.use('/api/route', router.unprotected); 
+1

, वाह बेन, कि वास्तव में बहुत स्मार्ट है कर सकते हैं! मुझे बस नामकरण ठीक करने की जरूरत है। – Zlatko

+1

यह प्रतिभा होगी, केवल मार्ग पथ समान होने पर ही यह काम नहीं करता है। मैंने एक्सप्रेस 4, पासपोर्ट 0.3.2 पर इसी कार्यान्वयन की कोशिश की है, और प्रमाणीकरण पर जांच मार्ग पथ का पालन करती है, राउटर उदाहरण नहीं। इस मामले में सभी मार्ग मेरे लिए संरक्षित किए जा रहे हैं। – jbodily

+2

यदि पथ पथ समान हैं तो यह काम नहीं करेगा, यह कैसे पता चल जाएगा कि आप किस का उपयोग करना चाहते हैं? आपके द्वारा परिभाषित पहला मार्ग प्राथमिकता लेगा। –

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