假设我有一条带有以下名称空间的路由:

app.use('/logged', adminRoute);


现在,我创建了以下passportjs函数:

app.get('/logged/panel', function (req, res) {
  if (req.user === undefined) {
      res.redirect('/login');
  } else {
      res.render('/logged/panel', {
      user: req.user
  })
  }
});


此功能检查是否在/logged/panel模式下对用户进行了身份验证。

我想修改此功能,以便它将对adminRoute中的每个获取/发布网址模式执行检查。如何正确执行此操作?

最佳答案

考虑使用express.Router

function ensureAuthenticated(req, res, next) {
  if(logged) return next();

  res.redirect('/login');
}

var loggedRouter = express.Router();
loggedRouter
  .use(ensureAuthenticated)
  .get('/panel', panelHandler)
  .get('/other', otherHandler);

var mainRouter = express.Router();
mainRouter.use('/logged', loggedRouter);

app.use(mainRouter);


您可以包括检查用户是否在ensureAuthenticated功能内登录。该中间件功能将始终在/logged/panel/logged/other之前执行。

09-17 11:30