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
相关产品推荐
相关产品推荐

