2016-06-05 13 views
2
var express = require('express'); 
var router = express.Router(); 
router.use(function(req, res, next){ 
    console.log(req.user) 
    if(!req.user){ 
     res.redirect('/login'); 
    }else{ 
     res.locals.username = req.user.username; 
     return next(); 
    } 
}); 

//this won't work 
router.get('/register', function(req, res, next) { 
    res.render('register'); 
}); 

Der erste Block macht Sinn und es funktioniert, ich kann ein Login-System mit geschützten Routen haben. Aber in der gleichen Zeit ruinierte es mein zweites Bit, es wird die Login Seite zeigen, obwohl ich versuche, zu localhost: 3000/register zu nagivieren.stapeln von routen in node.js

+0

Setzen Sie Ihre router.get vor Ihnen router.use und es wird nicht für Ihre Route aufgerufen werden. –

Antwort

1

Wenn Sie router.use() verwenden Sie den Router doch sagen, dass die Funktion Middleware in allen nächsten roter.get() Routen zu verwenden. Also hier macht die Reihenfolge Sinn. Wenn Ihnen die Reihenfolge wichtig ist, können Sie tun, was @bloodyKnuckles macht. Oder wenn Sie dieses Muster für Ihre Routen behalten möchten, können Sie Folgendes tun:

// Routes that don't need authorization like register 
router.get('home',...); 
router.get('register',...); 

// Use your authorization middleware 
router.use(function(req, res, next){ 
    console.log(req.user) 
    if(!req.user){ 
    res.redirect('/login'); 
    }else { 
    res.locals.username = req.user.username; 
    return next(); 
    } 
}); 

// At this point you're using the authorization middleware. 
// Any routes declared from here will call authorization middleware before its handler. 
router.get('profile', ...); 
0

Verwenden Sie die Expressroute-Middleware-Option, um geschützte Routen von ungeschützten Routen zu unterscheiden.

// unprotected routes (no auth middleware) 
router.get('/login', function(req, res, next) { 
    res.render('login'); 
}); 

router.get('/register', function(req, res, next) { 
    res.render('register'); 
}); 

// protected route (see auth middleware here) 
router.get('/userinfo', authorize, function(req, res, next) { 
    res.render('userinfo'); 
}); 

function authorize (req, res, next){ 
    console.log(req.user) 
    if(!req.user){ 
     res.redirect('/login'); 
    }else{ 
     res.locals.username = req.user.username; 
     return next(); 
    } 
} 

Fügen Sie Ihre Genehmigung Middleware nur in den geschützten Routen:

router.get(path, [middleware (optional),] callback) 
+0

im Grunde ist meine Bestellung falsch, das ist es? –

+0

Wenn Sie Ihre Berechtigung in 'router.use' setzen, wird die Bestellung zur Angelegenheit. Wenn Sie Ihre Berechtigung in "router.get" setzen, spielt die Reihenfolge Ihrer Routen keine Rolle mehr. – bloodyKnuckles