1

I am implementing an Audio library manager which uses user's google drive as backend storage. I am using PHP (google-api-php-client-2.2.1) to get the user's authorization for accessing his/her google drive.

So far I am able to receive access token and refresh token using example code from google (https://developers.google.com/api-client-library/php/auth/web-app), and also tested by listing files of user's google drive.

However, I am not able to figure out programmatically which user has given authorization to my application. Just user's email address will do. I don't need any other information.

I am using the following code.

<?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>";

    }

  ?>

The class for userInfo is like this

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");
  }
}

The params for get() method should be optional, but

$userInfo->get()

also given me Server Error.

I am not finding anything else from my google search on this.

I tried this (6 year old thread) but code errors out (apiHttpRequest class not found) How to identify a Google OAuth2 user?

I tried reading about openID but seems kinda complex. Also, not sure if google-api-php-client has helper class for openID.

I would really appreciate your help. Already spent 2+ days reading google api client php code but now up against the wall.

paul_brian
  • 31
  • 1
  • 3

0 Answers0