2016-06-05 4 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'); 
}); 

Первый блок имеет смысл, и он работает, я могу иметь систему входа с защищенными маршрутами. Но в то же время он разрушил мой второй бит, он покажет страницу входа, хотя я пытаюсь называть на localhost: 3000/register.укладка маршрутов в node.js

+0

Поместите свой router.get перед маршрутизатором.use, и он не будет вызван для вашего маршрута. –

ответ

1

Когда вы используете router.use() вы говорите маршрутизатор использовать эту функцию промежуточного уровня во всех последующих roter.get() маршрутов. Итак, порядок имеет смысл. Если вы заботитесь о заказе, вы можете делать то, что делают @bloodyKnuckles. Или, если вы хотите сохранить этот шаблон для своих маршрутов, вы можете сделать следующее:

// 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

Используйте опцию промежуточного программного обеспечения экспресс-маршрута, чтобы отличать защищенные маршруты от незащищенных маршрутов.

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

Включите ваше промежуточное программное обеспечение авторизации ТОЛЬКО в защищенных маршрутов:

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

в основном мой заказ неправильный, не так ли? –

+0

Ввод вашего auth в 'router.use' делает заказ. Если вы разместите свой auth в 'router.get', порядок ваших маршрутов больше не имеет значения. – bloodyKnuckles

Смежные вопросы