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

