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

创建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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 20:23:15