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

Jsonwebtoken未存入请求头导致获取时为Undefined问题求助

问题根源分析

你的后端注册/登录接口已正确生成JWT并通过响应体返回,但前端未将该token添加到后续受保护接口请求的Authorization请求头中,导致paginaProtegida中间件无法获取到对应字段,返回undefined。

解决方案步骤

1. 前端请求时携带Token

前端拿到后端返回的token后,需先存储(如localStorage),之后请求受保护接口时,必须在请求头中添加Authorization字段,格式为Bearer <你的token>。

示例代码(Axios)

// 登录成功后存储token
const loginRes = await axios.post('/login', { run: '你的RUN', password: '你的密码' });
localStorage.setItem('authToken', loginRes.data.token);

// 请求受保护接口时携带token
axios.get('/ruta-protegida', {
  headers: {
    'Authorization': `Bearer ${localStorage.getItem('authToken')}`
  }
});

示例代码(Fetch)

const token = localStorage.getItem('authToken');
fetch('/ruta-protegida', {
  method: 'GET',
  headers: {
    'Authorization': `Bearer ${token}`
  }
});

2. 完善后端中间件逻辑

当前paginaProtegida仅打印请求头,需补充token解析、验证逻辑:

export const paginaProtegida = (req, res, next) => {
  const bearerHeader = req.headers['authorization'];
  
  // 检查是否存在token
  if (!bearerHeader) {
    return res.status(403).json({ message: '未提供授权token' });
  }

  // 拆分Bearer前缀与token内容
  const bearerToken = bearerHeader.split(' ')[1];
  
  try {
    // 验证并解码token
    const decoded = jwt.verify(bearerToken, "mi_clave_secreta");
    // 将解码后的用户信息挂载到req对象,供后续接口使用
    req.usuario = decoded;
    next(); // 放行,执行后续路由逻辑
  } catch (error) {
    return res.status(401).json({ message: 'token无效或已过期' });
  }
}

3. 关键注意事项

  • 确保前端请求头字段拼写正确:Authorization(规范为首字母大写,HTTP头不区分大小写,但建议遵循规范)
  • 你的token设置了expiresIn: 120(2分钟过期),测试时注意不要超时
  • 生产环境禁止硬写密钥"mi_clave_secreta",改用环境变量(如process.env.JWT_SECRET)

内容的提问来源于stack exchange,提问作者Felipe Antonio Guzmán Anabalon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 14:54:29