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

通过Google PHP API获取登录用户基础信息失败的技术问询

如何通过Google API正确获取已登录用户的基础信息?

看起来你已经搭好了基础的Google客户端配置,但问题出在没有实际发起用户信息的请求,也没处理授权后的token环节。我来帮你修正代码并解释关键点:

核心问题分析

你的原代码里只做了$userInfo = $oauth2->userinfo;,这只是实例化了Userinfo服务的对象,并没有真正调用接口去拉取用户数据。另外,你也没处理授权成功后Google返回的code参数——这个code是用来换取access token的关键,没有token的话,Google API是不会给你返回用户数据的。

修改后的完整代码

<?php
// 初始化Google客户端实例
$gClient = new \Google_Client();
$gClient->setApplicationName('Login to Pronexo');
$gClient->setRedirectUri('http://localhost/pronexo/public/login/login_through_api/');
$gClient->setClientId('849746924921-ueqhqvtbb6l7ccfrcq4j405bvej03bm7.apps.googleusercontent.com');
$gClient->setClientSecret('W7DdT0QmATW-3ZVJMO55jsfY');
// 添加需要获取的用户信息权限
$gClient->addScope("https://www.googleapis.com/auth/userinfo.profile");
$gClient->addScope("https://www.googleapis.com/auth/userinfo.email");

// 处理授权回调:Google会把code参数带回你的redirect_uri
if (isset($_GET['code'])) {
    // 用code换取access token
    $token = $gClient->fetchAccessTokenWithAuthCode($_GET['code']);
    $gClient->setAccessToken($token);
    
    // 实例化Oauth2服务,调用get()方法获取用户信息
    $oauth2 = new \Google_Service_Oauth2($gClient);
    $userInfo = $oauth2->userinfo->get(); // 这一步才是真正请求用户数据
    
    // 输出完整用户信息
    echo "<pre>";
    print_r($userInfo);
    die;
} else {
    // 如果没有code,说明用户还没授权,跳转到Google登录授权页面
    $authUrl = $gClient->createAuthUrl();
    header('Location: ' . filter_var($authUrl, FILTER_SANITIZE_URL));
    exit;
}

关键改进点说明

  1. 处理授权code与token:当用户在Google页面登录授权后,会自动跳转到你的redirect_uri并携带code参数,我们需要用这个code调用fetchAccessTokenWithAuthCode()获取access token,再把token设置到客户端,这样API才会识别当前用户。
  2. 调用get()方法获取数据:$oauth2->userinfo只是服务对象,必须调用get()方法才会发起HTTP请求,拿到包含邮箱、姓名、头像等信息的用户数据。
  3. 补充未授权的跳转逻辑:如果用户还没授权,自动跳转到Google的登录授权页面,完成整个登录流程闭环。

额外小技巧

如果你不需要完整的用户对象,也可以直接调用单个字段的方法:

echo "用户邮箱:" . $userInfo->getEmail() . "<br>";
echo "用户姓名:" . $userInfo->getName() . "<br>";
echo "用户头像:" . $userInfo->getPicture() . "<br>";

最后别忘了检查Google开发者控制台里的重定向URI是否和代码里的setRedirectUri()完全一致,这是很多新手容易踩的坑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:42:38