通过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; }
关键改进点说明
- 处理授权code与token:当用户在Google页面登录授权后,会自动跳转到你的
redirect_uri并携带code参数,我们需要用这个code调用fetchAccessTokenWithAuthCode()获取access token,再把token设置到客户端,这样API才会识别当前用户。 - 调用get()方法获取数据:
$oauth2->userinfo只是服务对象,必须调用get()方法才会发起HTTP请求,拿到包含邮箱、姓名、头像等信息的用户数据。 - 补充未授权的跳转逻辑:如果用户还没授权,自动跳转到Google的登录授权页面,完成整个登录流程闭环。
额外小技巧
如果你不需要完整的用户对象,也可以直接调用单个字段的方法:
echo "用户邮箱:" . $userInfo->getEmail() . "<br>"; echo "用户姓名:" . $userInfo->getName() . "<br>"; echo "用户头像:" . $userInfo->getPicture() . "<br>";
最后别忘了检查Google开发者控制台里的重定向URI是否和代码里的setRedirectUri()完全一致,这是很多新手容易踩的坑。
内容的提问来源于stack exchange,提问作者Martin AJ
相关产品推荐
相关产品推荐

