У меня есть приложение, в котором на определенных страницах требуется, чтобы пользователь вошел в систему.
Я не уверен, что для этого есть что-то, но для этого я имею в виду следующее:
app.use((req, res, next) => {
if (req.session.username) {
app.get('/project/create', projectCtrl.create)
app.get('/project/create/save', projectCtrl.save)
} else {
return res.redirect('/')
}
next()
})
Это правильный способ сделать это, или есть лучший способ выразить? То, как я это делаю, кажется немного взломанным.
Да, это правильный способ сделать это. У вас есть промежуточное ПО на уровне приложения в express
. Он вызывается для каждого запроса, которое получает приложение.
Вы можете извлечь проверку username
и применить это как промежуточное ПО промежуточного уровня маршрута. Таким образом, промежуточное программное обеспечение только выполняется для маршрутов, к которым оно применяется.
function gatePass(req, res, next) {
if(req.session.username) {
next();
}
else {
return res.redirect('/');
}
}
app.get('/project/create', gatePass, projectCtrl.create)
app.get('/project/create/save', gatePass, projectCtrl.save)
Вы можете сделать это немного дальше, если хотите разделить проблемы, используя экспресс-маршрутизатор вместе с промежуточным программным обеспечением уровня маршрута. Это также применяет промежуточное ПО непосредственно к маршрутам.
var router = express.Router();
router.use('/project/create', gatePass);
router.use('/project/create/save', gatePass);
router.get('/project/create', projectCtrl.create);
router.get('/project/create/save', projectCtrl.save);
app.use('/', router);
это решение работает. Это не лучшее, но для небольшого проекта это будет хорошо. Единственным недостатком является то, что вам нужно будет определить каждый маршрут, который вы хотите проверить с помощью сеанса.
Nodejs - это мир промежуточного программного обеспечения, так почему бы не использовать его? Я думаю, это лучшее, что нужно сделать.
Verify - это файл, в котором я экспортирую свое промежуточное программное обеспечение, и я применяю его на всем моем маршрутизаторе.. (в этом случае он просто проверяет, зарегистрирован ли пользователь или нет)
var verify = require('./verify');
router.all('/*', verify.isLogged, function(req, res, next) {
if(req.decoded._doc.isLogged == "") {
next();
}
else {
res.json("error");
}
});
Таким образом, если в будущем вам нужно будет проверить одно, а затем еще одно, вам просто нужно позвонить вам, где вы хотите проверить
router.get('/test', verify.isLogged, verify.isAdmin function(req, res, next) {
if(req.decoded._doc.isAdmin == "") {
next();
}
else {
res.json("error");
}
});