创建Post时触发JsonWebTokenError:需提供密钥或公钥,请求技术协助
问题排查与解决方案
核心原因:请求未正确携带JWT认证头
其他接口(登录/注册/密码重置)正常,说明token本身有效,问题出在发帖请求没有正确把token放到Authorization请求头里。
1. 修复客户端apiRequest函数
你在handlePostSubmit里传了token: user?.token,但必须确保apiRequest函数把token格式化为Bearer {token}并添加到请求头。如果apiRequest没做这个处理,服务端的userAuth中间件会因为找不到Bearer前缀直接返回认证失败。
正确的apiRequest实现示例:
const apiRequest = async ({ url, token, data, method }) => { const requestConfig = { url, method: method || "GET", headers: { "Content-Type": "application/json", }, }; // 关键:添加Bearer认证头 if (token) { requestConfig.headers.Authorization = `Bearer ${token}`; } if (data) { requestConfig.data = data; } try { const response = await axios(requestConfig); return response.data; } catch (error) { throw error.response?.data || error.message; } };
2. 服务端userAuth中间件小修正
你的userAuth里有个错误信息笔误,把Authentication== failed改成Authentication failed,保持错误提示一致:
if (!authHeader || !authHeader?.startsWith("Bearer")) { next("Authentication failed"); // 去掉多余的等号 }
3. 额外检查点
- 确认发帖时使用的
user?.token和登录成功返回的token完全一致(可以在控制台console.log(user?.token)验证)。 - 检查服务端环境变量
JWT_SECRET_KEY是否正确加载,确保所有接口使用的是同一个密钥。
内容的提问来源于stack exchange,提问作者bernard
相关产品推荐
相关产品推荐

