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
相关产品推荐
相关产品推荐

