我正在实现一个音频库管理器,该管理器使用用户的Google驱动器作为后端存储。我正在使用PHP( google-api-php-client-2.2.1 )来获得用户访问他/她的Google驱动器的授权。
到目前为止,我可以使用来自Google(https://developers.google.com/api-client-library/php/auth/web-app)的示例代码来接收访问令牌和刷新令牌,并且还可以通过列出用户的Google驱动器文件进行测试。
但是,我无法以编程方式找出哪个用户已授权我的应用程序。只需用户的电子邮件地址即可。我不需要任何其他信息。
我正在使用以下代码。
<?php
require_once 'google-api-php-client/vendor/autoload.php';
session_start();
$client = new Google_Client();
$client->setAuthConfig('client_secret.json'); //downloaded from google oauth credentials portal. It includes redirect URL
$client->setAccessType("offline"); // offline access
$client->setIncludeGrantedScopes(true); // incremental auth
$client->addScope(Google_Service_Drive::DRIVE_METADATA_READONLY);
if (! isset($_GET['code'])) {
//Get authorization and User consent from Google
$auth_url = $client->createAuthUrl();
header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL));
} else { //Authorization completed
//Get access token
$client->authenticate($_GET['code']);
$_SESSION['access_token'] = $client->getAccessToken();
$_SESSION['refresh_token'] = $client->getRefreshToken();
echo "Access Token<br>";
var_dump ($_SESSION['access_token']); //works
echo "<br>";
echo "Refresh Token<br>";
var_dump ($_SESSION['refresh_token']); //works
echo "<br>";
$service=new Google_Service_Oauth2($client);
echo "Auth2 Service created<br>"; //Getting this print
$usr_info=$service->userinfo;
echo "User Info<br>"; //Getting this print
var_dump ($usr_info); //Getting this print, Very long JSON structure. But info is mostly pertaining to my app...no user information showing here
echo "<br>";
//$usr_info_get = $usr_info->get(); //Throwing Error
//$usr_info_get = $usr_info->get(['email']); //Throwing Error
//$usr_info_get = $usr_info->get()['email']; //Throwing Error
echo "User Info Get<br>";
//var_dump ($usr_info_get);
echo "<br>";
}
?>
userInfo的类是这样的
class Google_Service_Oauth2_Resource_Userinfo extends Google_Service_Resource
{
/**
* (userinfo.get)
*
* @param array $optParams Optional parameters.
* @return Google_Service_Oauth2_Userinfoplus
*/
public function get($optParams = array())
{
$params = array();
$params = array_merge($params, $optParams);
return $this->call('get', array($params), "Google_Service_Oauth2_Userinfoplus");
}
}
get()方法的参数应该是可选的,但是
$userInfo->get()
还给了我服务器错误。
我在Google搜索中找不到其他内容。
我尝试了这个(6岁的线程),但是出现了代码错误(找不到apiHttpRequest类) How to identify a Google OAuth2 user?
我尝试阅读有关openID的信息,但看起来有点复杂。另外,不确定google-api-php-client是否具有openID的帮助程序类。
非常感谢您的帮助。已经花了2天多的时间阅读google api客户端php代码,但现在已经步入正轨。