Express.js требует сеанса для доступа к определенным маршрутам

1

У меня есть приложение, в котором на определенных страницах требуется, чтобы пользователь вошел в систему.

Я не уверен, что для этого есть что-то, но для этого я имею в виду следующее:

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

Это правильный способ сделать это, или есть лучший способ выразить? То, как я это делаю, кажется немного взломанным.

  • 0
    Это не собирается приближаться к работе. Может сработать для вашего самого первого запроса к серверу, после этого не сработает.
Теги:
express

2 ответа

1

Да, это правильный способ сделать это. У вас есть промежуточное ПО на уровне приложения в 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);
0

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню