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

使用JWT获取用户ID返回-1,无法修改用户信息求助

问题分析与解决方案

核心问题定位

返回userId=-1说明getUserId方法未能正确解析JWT令牌,导致后续获取用户、更新信息的逻辑全部失效。结合代码和场景,主要问题集中在JWT配置错误、代码逻辑漏洞和请求头格式问题三个方面。


1. 修复JWT密钥拼写错误

在jwt.utils.js中,密钥变量名JWT_SING_SECRET是拼写错误,正确应为JWT_SIGN_SECRET(SING→SIGN)。这个错误会导致令牌验证失败,直接触发默认返回-1的逻辑:

// 错误写法
JWT_SING_SECRET
// 正确写法
JWT_SIGN_SECRET

修改generateTokenForUser和getUserId方法中的密钥变量名,确保和你的环境变量/配置文件中的密钥名称一致。


2. 完善JWT验证的错误日志排查

当前getUserId方法中,try/catch块捕获异常后没有任何日志输出,无法定位验证失败的具体原因(比如令牌过期、签名不匹配)。修改代码添加日志:

getUserId: function (authorization) {
  let userId = -1;
  let token = module.exports.parseAuthorization(authorization);
  if (token != null) {
    try {
      let jwtToken = jwt.verify(token, JWT_SIGN_SECRET); // 注意修正密钥名
      if (jwtToken != null) userId = jwtToken.userId;
    } catch (err) {
      // 添加日志,方便排查具体错误
      console.error("JWT验证失败:", err.message);
    }
  }
  return userId;
},

启动服务后发起请求,查看控制台日志,就能知道是令牌过期、签名错误还是其他问题。


3. 修正updateUserProfile中的异步回调错误

在updateUserProfile的waterfall第二个函数中,then的回调参数和done调用格式错误:

// 错误写法
.then(function (userFound, done) {
  done(userFound);
})
// 正确写法
.then(function (updatedUser) {
  done(null, updatedUser); // waterfall的done第一个参数是错误对象,第二个是结果
})

原代码会导致waterfall最终回调无法正确接收更新后的用户数据,进而返回错误。


4. 检查Postman请求头格式

确保请求头中的Authorization格式正确:

  • 格式必须是:Bearer <你的JWT令牌>
  • 注意Bearer后面有一个空格,令牌不能包含多余的空格或换行
  • 在Postman的Headers标签中,键填Authorization,值填Bearer xxxxxx(替换xxxxxx为实际登录时获取的令牌)

5. 验证登录接口的令牌生成逻辑

确认登录接口在生成令牌时,传入的userData.id是数据库中真实存在的用户ID(不是undefined或null)。可以在generateTokenForUser中添加日志:

generateTokenForUser: function (userData) {
  console.log("生成令牌的用户ID:", userData.id); // 确认ID是否正确
  return jwt.sign(
    {
      userId: userData.id,
      isAdmin: userData.isAdmin,
    },
    JWT_SIGN_SECRET, // 修正密钥名
    {
      expiresIn: "1h",
    }
  );
},

如果日志中userData.id为undefined,需要检查登录接口查询用户时是否正确返回了id字段。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:32:51