如何查找用户的电子邮件ID? -Google Oauth2 API PHP客户端

时间:2018-07-02 10:47:53

标签: google-oauth2 oauth2client

我正在实现一个音频库管理器,该管理器使用用户的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代码,但现在已经步入正轨。

0 个答案:

没有答案