首页 > 解决方案 > 如何只允许管理员访问 Nodejs `AdminBro` 中的管理页面

问题描述

如何只允许管理员访问 Admin 页面AdminBroNodejs

我想要的只是让管理员有权访问该 adminBro页面,是否有任何特定方法可以完成此操作?

我在我的app.js文件中做了这个,但它不起作用

app.get("/admin", function (req, res, next) {
  res.locals.login = req.user;
  if (res.locals.login.roles == "admin") {
     app.use("/admin", adminRouter);
  } else {
    res.redirect("/");
 }
});

标签: node.jsexpressadmin-bro

解决方案


您不能使用 new app.useinside app.get,因为(req, res, next)已经使用了。你有两个选择:

  1. 您在 if 条件正文中的路线
if (res.locals.login.roles === 'admin') {
   // your admin route logic
   res.send('admin page')
} else {
  res.redirect('/')
}
  1. 我习惯使用像这样的小型中间件功能:
const isAdmin = (req, res, next) => {
  if (req.user.roles === 'admin') {
    return next();
  }
  res.redirect('/');
};

然后你以这种方式在任何一条路线中使用它:

app.get('/admin', isAdmin, adminRouter)

推荐阅读