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

PHP调用Google API获取用户信息无email字段如何解决

问题根源

你当前获取不到email字段的核心原因有两个:

  1. 你现在代码里加的scope配置是针对新的授权流程的,而你用来验证的$tokenId是用户之前授权时生成的,当时授权并没有申请email相关权限,所以返回的JWT payload里自然不会带email字段
  2. 你额外加了不必要的scope,plus.login和analytics.readonly和获取用户邮箱无关,反而可能干扰授权配置
解决步骤
  • 第一步:清理多余的scope配置,保留必要的用户信息权限即可,修改后的scope配置如下:
// 移除不必要的analytics、plus.login相关scope,仅保留需要的权限
$google_client->setScopes([
    'https://www.googleapis.com/auth/userinfo.profile',
    'https://www.googleapis.com/auth/userinfo.email',
    'email',
    'openid' // 补充openid基础scope,这是OIDC返回用户身份信息的基础要求
]);
  • 第二步:触发用户重新授权,让用户在Google的授权页面确认授予你邮箱读取权限,拿到新的$tokenId后再进行验证
  • 第三步:验证新token时,如果还是没拿到email,可以额外调用userinfo接口补全信息,代码示例:
if ($credentials) {
    $data = $credentials->getAttributes();
    // 如果payload中没有email,调用userinfo接口获取
    if (!isset($data['payload']['email'])) {
        $oauth = new Google_Service_Oauth2($google_client);
        $userInfo = $oauth->userinfo->get();
        $email = $userInfo->getEmail();
        // 把email合并到返回数据里即可
        $data['payload']['email'] = $email;
    }
    echo "<pre>";print_R($data);
}
补充说明

部分Google账号可能没有设置公开邮箱,即便你申请了权限也可能返回为空,这种情况需要引导用户绑定邮箱或者用其他方式获取身份信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:54:02