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

为什么Express JWT授权场景下token请求头无法被读取,req.user为undefined?

问题原因排查及解决方案
  • 先确认JWT签发逻辑的结构是否正确
    如果你能走到dashboard路由的console.log(req.user)步骤,说明authorization中间件已经通过了token校验,没有触发403返回,问题出在jwt校验后的返回值结构不符合预期:你在中间件里给req.user赋值的是verify.user,如果签发JWT时的payload没有套user外层字段,verify返回的对象里就不存在user属性,自然输出undefined。
    正确的JWT签发示例参考:
    // 签发时必须套user外层字段,和中间件的取值逻辑对应
    const token = jwt.sign(
      { user: { id: 用户ID, email: 用户邮箱 } },
      process.env.jwtSecret,
      { expiresIn: '24h' }
    )
    
    你可以在authorization中间件的try分支里加一行console.log(verify),直接看校验后的返回值结构就能快速定位该问题。
  • 检查请求头传递是否匹配
    请求头键名大小写完全敏感,你中间件里读取的是req.header('token'),客户端传递时必须严格用token作为请求头的键名,如果写为Token、TOKEN或者标准的Authorization都无法被正常读取。如果请求头没有正确传递,中间件会直接返回403,不会走到路由层的打印逻辑。
  • 排查dotenv配置是否正确
    确认项目根目录存在.env文件,且jwtSecret配置项的拼写和值和你签发JWT时用的密钥完全一致,密钥不匹配会触发jwt校验报错,走catch分支返回403。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:45:03