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

Sequelize+JWT鉴权Postman请求提示No token provided排查

问题原因

你的JWT鉴权中间件固定从请求头的x-access-token字段读取token值,如果你在Postman中使用默认的「Bearer Token」鉴权选项传token,Postman会自动把token拼接为Bearer <token内容>的格式放到Authorization请求头中,中间件读取x-access-token时拿到的是空值,就会返回403的"No token provided!"错误。

解决方法(二选一即可)

方法1:调整Postman传参,适配现有后端逻辑

无需修改后端代码,调整Postman的请求配置:

  • 打开对应请求的Headers标签页
  • 新增一条头配置:Key填x-access-token,Value直接填登录接口返回的accessToken字段原值,不要加Bearer 前缀
  • 重新发起请求即可正常通过鉴权

方法2:优化后端中间件,兼容标准鉴权格式(推荐)

修改鉴权中间件逻辑,同时兼容自定义x-access-token头和业界通用的Authorization: Bearer <token>传参格式,后续不管是Postman默认鉴权方式、前端请求库的标准传参都能正常识别,修改后的verifyToken代码如下:

verifyToken = (req, res, next) => {
  let token = req.headers["x-access-token"];
  // 兼容标准Authorization Bearer传参格式
  if (!token && req.headers.authorization) {
    const authParts = req.headers.authorization.split(" ");
    if (authParts.length === 2 && authParts[0] === "Bearer") {
      token = authParts[1];
    }
  }

  if (!token) {
    return res.status(403).send({
      message: "No token provided!"
    });
  }

  jwt.verify(token, config.secret, (err, decoded) => {
    if (err) {
      return res.status(401).send({
        message: "Unauthorized!"
      });
    }
    req.id = decoded.id;
    next();
  });
};

修改完成后重启Node服务即可生效,不需要调整你之前Postman的Bearer Token传参配置。

快速排查技巧

如果后续再遇到类似鉴权不通过的问题,可以在verifyToken逻辑最开始加一行console.log(req.headers),发起请求后直接看后端控制台打印的请求头内容,就能快速确认token是否传到、字段名是否匹配。


内容的提问来源于stack exchange,提问作者Elodie Jean

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 01:27:26