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

JWT授权登录失败可正常拉取用户信息 问题排查求助

问题根因

你提供的登录逻辑中存在未定义变量引用错误,这是触发报错的直接原因。
问题出在登录函数的jwt生成逻辑段:

try{
  token = jwt.sign({userId: existingUser.id, email: existingUser.email},
     process.env.JWT_KEY,
     {expiresIn: '1h'});
  user.token = token;
}catch(err){
  const error = new HttpError(
    'Logging in failed, please try again', 500
  );
  return next(error);
}

在整个login方法的作用域内,你仅定义了存储数据库查询结果的existingUser变量,从未声明过名为user的变量,执行user.token = token时会直接抛出未定义变量的引用错误,被catch块捕获后就返回了你看到的报错信息。

修复方案

两种可选修复方式,按需选择即可:

  1. 如果你不需要将token存储到用户实例上(你后续返回给前端的响应直接使用了生成的token变量,并未用到user.token),直接删除user.token = token;这一行即可:
try{
  token = jwt.sign({userId: existingUser.id, email: existingUser.email},
     process.env.JWT_KEY,
     {expiresIn: '1h'});
}catch(err){
  const error = new HttpError(
    'Logging in failed, please try again', 500
  );
  return next(error);
}
  1. 如果你确实需要把token挂载到用户对象上,将user替换为你实际定义的existingUser即可:
try{
  token = jwt.sign({userId: existingUser.id, email: existingUser.email},
     process.env.JWT_KEY,
     {expiresIn: '1h'});
  existingUser.token = token;
}catch(err){
  const error = new HttpError(
    'Logging in failed, please try again', 500
  );
  return next(error);
}

补充建议

后续调试时可以在catch块中打印错误详情,方便快速定位问题:

catch(err){
  console.log('登录报错详情:', err);
  const error = new HttpError(
    'Logging in failed, please try again', 500
  );
  return next(error);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:09:04