2014-09-01 9 views
10

Sto utilizzando Express 4 dove ho un percorso protetto da passport.js, in questo modo:Qual è un modo migliore per autenticare alcuni percorsi su Express 4 Router?

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 
}); 

Così - vengono percorsi di raccolta devono (per lo più) non essere protetti per me, e creare percorsi/aggiornamento dovrebbe . Ma questo mi obbliga a passare il passaporto a tutti i miei file di percorso (ne ho 7 fino ad ora), quindi ad aggiungerlo come un middleware ad alcuni di essi.

mi piace la versione in cui si può fare qualcosa di simile:

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

Ma questo richiederebbe autenticazione su tutti miei percorsi.

C'è un modo migliore per passare il passaporto tutto intorno?

risposta

26

È possibile suddividere il router in protetto/non protetto e chiamare il middleware sui percorsi protetti.

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 
}; 

E allora si può fare

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

Wow, Ben, che è in realtà piuttosto intelligente! Ho solo bisogno di risolvere i nomi lì. – Zlatko

+1

Questo sarebbe geniale, solo che non funziona quando i percorsi del percorso sono gli stessi. Ho provato questa stessa implementazione su express4, passaporto 0.3.2 e il controllo sull'autenticazione segue il percorso del percorso, non l'istanza del router. Tutti i percorsi in questo caso sono protetti per me. – jbodily

+2

Non funzionerà se i percorsi del percorso sono uguali, come sarà possibile sapere quale si desidera utilizzare? Il primo percorso definito avrà la precedenza. –

Problemi correlati