Как найти идентификатор электронной почты пользователя? - PHP-клиент Google Oauth2 API - PullRequest
0 голосов
/ 02 июля 2018

Я использую менеджер аудио-библиотеки, который использует 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, но теперь у стены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...