Я использую менеджер аудио-библиотеки, который использует 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 не найден)
Как определить пользователя Google OAuth2?
Я пытался читать об openID, но кажется довольно сложным. Также не уверен, есть ли у google-api-php-client класс помощника для openID.
Буду очень признателен за вашу помощь. Уже потратил 2+ дня, читая php-код google api client, но теперь у стены.