You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Node.js的AdminBro中如何仅允许管理员访问管理页面

代码不生效的原因

你当前的写法不符合Express的中间件注册逻辑:app.use()是全局注册路由的方法,写在/admin的GET路由回调内部时,只有第一次有用户访问/admin接口时才会挂载adminRouter,且挂载完成后所有用户都可以直接访问/admin下的所有子路径,不会再走你写的权限判断逻辑,完全达不到校验效果。

正确实现方案

1. 抽离统一的管理员权限校验中间件

const adminAuthCheck = (req, res, next) => {
  // 先判断用户是否已登录,避免req.user为空时报错
  if (!req.user) {
    return res.redirect('/login')
  }
  // 角色判断:如果roles是数组格式,替换为req.user.roles.includes('admin')
  if (req.user.roles === 'admin') {
    next()
  } else {
    res.redirect('/')
  }
}

2. 按顺序挂载中间件和AdminBro路由

将权限校验中间件放在adminRouter之前,所有/admin前缀的请求都会先经过权限校验,校验通过才会进入AdminBro的处理逻辑:

app.use('/admin', adminAuthCheck, adminRouter)

注意事项

  • 确保用户认证中间件(如Passport.js)配置正常,req.user能正确拿到当前登录用户的信息
  • 不要在任意路由的回调函数内使用app.use注册路由或中间件,会导致路由匹配逻辑混乱

内容的提问来源于stack exchange,提问作者Chukwuma Kingsley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 21:27:04