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

Expo React Native谷歌登录iOS/Android正常,Web端无数据问题求助

Expo Google登录Web端authentication为null问题排查与解决

针对你遇到的Expo Google登录Web端返回success但authentication为null的问题,可从以下几个关键点排查:

  • 核对Web客户端ID与重定向URI配置
    确保你使用的webClientId是谷歌云控制台中Web应用类型生成的客户端ID,不能复用iOS/Android的客户端ID。同时检查「已获授权的重定向URI」,必须添加Expo Web默认的http://localhost:19006(开发环境),生产环境要补充对应域名的URI,且URI需完全匹配(包括协议、端口、路径)。

  • 替换useIdTokenAuthRequest为useAuthRequest
    Web端使用useIdTokenAuthRequest无法直接获取accessToken,需改用useAuthRequest获取授权码,再通过谷歌的token端点换取令牌。修改代码如下:

    const [request, response, promptAsync] = Google.useAuthRequest({
      webClientId: "你的Web客户端ID",
      iosClientId: "你的iOS客户端ID",
      androidClientId: "你的Android客户端ID",
      scopes: ["openid", "profile", "email"],
    });
    
    React.useEffect(() => {
      if (response?.type === "success") {
        const { code } = response.params;
        // 用授权码换取accessToken和idToken
        fetch("https://oauth2.googleapis.com/token", {
          method: "POST",
          headers: { "Content-Type": "application/x-www-form-urlencoded" },
          body: new URLSearchParams({
            client_id: "你的Web客户端ID",
            redirect_uri: "http://localhost:19006", // 与谷歌云配置一致
            grant_type: "authorization_code",
            code: code,
          }),
        })
        .then(res => res.json())
        .then(data => {
          setAccessToken(data.access_token);
          setIdToken(data.id_token);
          fetchUserInfo();
        })
        .catch(err => console.error(err));
      }
    }, [response]);
    
  • 检查OAuth同意屏幕状态
    确保谷歌云控制台的OAuth同意屏幕已发布(针对外部用户),未发布的同意屏幕仅允许项目所有者登录,普通用户登录会触发隐性错误,导致authentication为空。

  • 验证路由模式匹配
    若你的Expo Web使用自定义路由,需确保重定向URI与实际跳转后的页面地址完全一致,包括hash或path路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 11:50:20