NodeJS API应用浏览器访问后端图片提示用户未授权问题求助
问题原因&解决方案
1. 路径拼写不匹配
你访问的图片示例路径为/public/upload/xxx(upload为单数),但JWT白名单配置的正则、静态资源挂载的路径均为/public/uploads(uploads为复数,多了一个s),路径不匹配导致白名单规则未生效,触发了JWT授权校验。
你可以选择两种方案统一路径:
- 访问路径改为
/public/uploads/xxx,和现有配置保持一致 - 把JWT白名单正则、静态资源挂载路径的
uploads统一改为单数upload,和访问路径保持一致
2. 中间件执行顺序错误
Express中间件是按注册顺序从上到下执行的,你当前的注册顺序是先执行JWT校验,再处理静态资源请求。即使路径拼写正确,静态资源请求也会先经过JWT校验逻辑。
请调整app.js中的中间件顺序,把静态资源挂载放在JWT校验之前:
// 调整后的顺序 app.use("/public/uploads", express.static(__dirname + "/public/uploads")); app.use(authJwt()); app.use(errorHandler);
3. isRevoked函数逻辑缺陷
当前isRevoked函数在请求无token、payload为空的情况下,调用!payload.isAdmin会抛出异常,需要补充判空逻辑:
async function isRevoked(req, payload, done) { if (payload && !payload.isAdmin) { return done(null, true); } done(null, false); }
内容的提问来源于stack exchange,提问作者ED209
相关产品推荐
相关产品推荐

