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

React Native移动端注册/登录时出现Apollo Link State等报错求助

解决React Native注册/登录时的JWT格式错误与GraphQL代理请求失败问题

我来帮你拆解这两个关联的报错,一步步定位解决:

1. 处理 JsonWebTokenError: jwt malformed 错误

这个报错直白来说就是你拿到的JWT令牌格式完全不对,同时还伴随着未捕获的Promise拒绝警告,具体排查方向:

  • 验证令牌本身的有效性
    确保后端返回的token是符合JWT标准的字符串——它必须是由.分隔的三个Base64URL编码部分(header、payload、signature)。如果拿到的是空值、截断字符串或者乱码,那肯定会触发这个错误。

  • 检查请求逻辑中的令牌提取环节
    看看你在登录/注册请求的回调里,是不是正确从响应体中提取了令牌。比如有没有把data.token写成了data.data.token,或者在传递过程中不小心给令牌加了额外的空格、转义字符。

  • 补上Promise异常处理
    报错里的UnhandledPromiseRejectionWarning提示你没有处理请求的失败分支。记得用.catch()捕获fetch/axios的错误,或者在async/await代码外层包上try/catch,避免这类警告干扰问题定位:

    // 示例:用try/catch处理登录请求
    const handleLogin = async () => {
      try {
        const response = await fetch('your-proxy-url/graphql', {
          method: 'POST',
          body: JSON.stringify(loginQuery)
        });
        const data = await response.json();
        // 处理令牌
        const token = data.data.login.token;
      } catch (error) {
        console.error('登录请求失败:', error);
      }
    };
    

2. 解决GraphQL代理请求失败问题

Error sending request to origin 说明你的代理服务(比如Apollo Engine)无法把请求转发到实际的GraphQL服务器,核心问题大概率是配置错误:

  • 核对Origin地址配置
    找到你项目中代理服务的配置文件(比如apollo.config.js、环境变量文件或者后台管理界面的Engine配置),确认填写的GraphQL服务器Origin地址和实际后端完全一致:

    • 注意区分http和https,不要漏写端口号(比如后端跑在3000端口就必须加上:3000)
    • 地址末尾不要多写斜杠,比如http://your-server.com/graphql 不要写成http://your-server.com/graphql/
  • 测试后端地址的连通性
    直接绕过代理,测试后端GraphQL服务是否能正常响应:
    在终端里执行类似命令(替换成你的后端地址):

    curl -X POST http://your-graphql-server:3000/graphql \
      -H "Content-Type: application/json" \
      -d '{"query":"{yourTestQuery}"}'
    

    如果这个请求也失败,说明后端服务没启动、端口被占用或者网络不通,先解决后端的可用性问题。

  • 排查跨域与网络限制

    • 如果是真机测试,确保手机和后端服务器在同一局域网,或者后端配置了允许跨域的CORS规则
    • 如果是云服务器,检查防火墙是否开放了GraphQL服务对应的端口,有没有IP白名单限制

关联问题说明

这两个错误很可能是连锁反应:如果代理请求失败,你的应用可能拿到错误的响应(甚至空响应),进而尝试解析无效的内容作为JWT令牌,触发格式错误。建议先解决代理请求失败的问题,再验证JWT令牌的正确性。

内容的提问来源于stack exchange,提问作者Hendry Lim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:33:43