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

调用消息API时Postman报‘Not authorized, token failed’错误的排查

问题分析与解决

旧token是否还能使用?

基本不能用了。你的authMiddleware.js中,jwt.verify(token, process.env.JWT_SECRET)验证失败时会抛出该错误,常见原因包括:

  • token过期:你生成token时设置了expiresIn: "30d"(见generateToken函数),如果上周获取的token至今已超过30天,会直接验证失败。可以在终端执行以下命令查看token过期时间:
    // 用node.js解码token
    const jwt = require('jsonwebtoken');
    const decoded = jwt.decode('你的旧token');
    console.log(new Date(decoded.exp * 1000)); // 转换为本地时间
    
  • JWT_SECRET变更:如果服务器的process.env.JWT_SECRET和生成该token时的密钥不一致,验证会失败。比如部署时重新配置了环境变量,或者本地.env文件被修改。
  • token被篡改:如果token内容被手动修改过,也会触发验证失败。

如何生成新token?

你的项目中generateToken函数是在用户登录流程中调用的,生成新token的步骤如下:

  1. 调用项目的登录API(比如/api/users/login),传入正确的用户名和密码。
  2. 登录接口验证用户身份后,会调用generateToken(user._id)生成新的JWT token,并返回给客户端。
  3. 在Postman中,将新token填入请求头的Authorization字段,格式为Bearer 新获取的token,再调用消息API即可。

额外排查建议

  • 检查Postman请求头:确保Authorization字段拼写正确,Bearer与token之间有且仅有一个空格。
  • 确认JWT_SECRET一致性:可以在代码中临时添加console.log(process.env.JWT_SECRET)(上线前务必删除),对比生成token时使用的密钥。
  • 验证用户存在性:如果生成旧token的用户在数据库中已被删除,User.findById(decoded.id)会返回null,也可能间接导致验证失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 08:01:23