Express站点adminProfile路由普通用户可直接越权访问故障排查
问题原因
你当前仅在前端视图层控制了Admin按钮的显示,路由层只校验了用户是否登录,没有对访问者的管理员身份做校验,所以任何登录用户都可以直接通过地址栏访问管理员路径。
修复方案
第一步:新增管理员权限校验中间件
在shopUsers-routes.js的路由定义前新增isAdmin中间件:
const isAdmin = (req, res, next) => { // 同时校验登录状态和管理员身份 if (req.isAuthenticated() && req.user.email === "abodn70@hotmail.com") { return next(); } // 非管理员跳转并提示无权限 req.flash('error', '您无权限访问该页面'); res.redirect('/'); // 此处可替换为你站点的实际首页路径 }
第二步:修改adminProfile路由的守卫逻辑
把原路由的isAuthenticated替换为新增的isAdmin中间件即可(isAdmin内部已包含登录校验,无需重复配置):
router.get('/adminProfile', isAdmin, (req, res)=>{ res.render('shopMembers/adminProfile', { success: req.flash('success') }) })
可选优化建议
- 不要硬编码管理员邮箱在业务代码中,可以将管理员邮箱配置到
.env环境变量中,后续修改无需调整业务逻辑 - 如果后续有扩展多名管理员的需求,可以在
SUser用户表中新增isAdmin布尔类型字段,校验逻辑调整为判断req.user.isAdmin即可,扩展性更强
内容的提问来源于stack exchange,提问作者user16588800
相关产品推荐
相关产品推荐

