Gmail PHP API收到错误的帐户电子邮件

时间:2017-08-25 14:14:04

标签: php oauth-2.0 google-oauth gmail-api google-signin

我正在开发一个使用Gmail API从gmail读取电子邮件的PHP。

基本上我就像快速入门页面一样(https://developers.google.com/gmail/api/quickstart/php)。

首先我加载客户端:

 require __DIR__ . '/Google/vendor/autoload.php';
 $client = new Google_Client();
 $client->setAuthConfigFile(__DIR__ . '/client_secret.json');
 $client->setAccessType('offline');
 $client->setApprovalPrompt('force');
 $client->setScopes(Google_Service_Gmail::MAIL_GOOGLE_COM);
 $client->setRedirectUri('http://' . $_SERVER['HTTP_HOST'] . '/index.php');

然后,如果我从使用我的应用程序中的用户ID存储的数据库加载凭据。 如果凭证不存在,我将重定向作为文档sais:

  $client->setAccessType('offline');
  $client->setApprovalPrompt('force');
  $auth_url = $client->createAuthUrl();
  header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL));

授权后,我使用google在我的重定向网址<:p>上提供的代码获取访问令牌

$token = $client->fetchAccessTokenWithAuthCode($_GET['code']);
//storing the data in the db
header('Location: /index.php');

当然,如果令牌过期,我会在身份验证过程中进行刷新:

if($client->isAccessTokenExpired()) {
    $refreshToken = $client->getRefreshToken();
    $client->fetchAccessTokenWithRefreshToken($refreshToken);
    $newToken = $client->getAccessToken();
    $newToken['refresh_token'] = $refreshToken;
    //store the new token
}

所以在此之后我可以访问我的用户的电子邮件列表,它完美地运行。 问题是,如果我使用我的帐户登录,我会看到正确的电子邮件,但在与其他用户登录其他帐户后,我会在两个帐户中看到相同的电子邮件。

因此,例如,如果我为用户1授权帐户smith@gmail.com,那么对于用户2,电子邮件seth@gmail.com,在这两种情况下我都会看到相同的电子邮件(来自smith@gmail.com) )。

我已经检查过问题是否是我的,所以如果加载的访问令牌是相同的,但不幸的是,访问令牌是不同的。

另一个疯狂的事情是,如果我刷新第二个帐户(smith@gmail.com)的令牌,我会看到正确的电子邮件,但现在,将会看到史密斯电子邮件。

发生了什么事?我错过了什么?

更新

我已经尝试了每一步,问题是访问令牌,我也在另一台服务器上尝试过,但两者都返回相同的电子邮件。

我也尝试使用seth@gmail.com获取身份验证代码并手动检索访问令牌:

  $token = $client->fetchAccessTokenWithAuthCode($code);

但是没办法,也是这样,它会继续认证我作为另一封电子邮件。

更新

事情变得越来越陌生,我试图删除配置文件的所有部分,并且只有在我必须检索身份验证代码时才使用它。

因此,在请求中我只传递了访问令牌数组,发生的情况是我可以看到电子邮件也完全删除了访问令牌,所以基本上客户端在请求时看起来是空的。

(
[auth:Google_Client:private] => 
[http:Google_Client:private] => 
[cache:Google_Client:private] => 
[token:Google_Client:private] => Array
    (
        [access_token] => no token what so eva
    )

[config:Google_Client:private] => Array
    (
        [application_name] => 
        [base_path] => https://www.googleapis.com
        [client_id] => 
        [client_secret] => 
        [redirect_uri] => 
        [state] => 
        [developer_key] => 
        [use_application_default_credentials] => 
        [signing_key] => 
        [signing_algorithm] => 
        [subject] => 
        [hd] => 
        [prompt] => 
        [openid.realm] => 
        [include_granted_scopes] => 
        [login_hint] => 
        [request_visible_actions] => 
        [access_type] => online
        [approval_prompt] => auto
        [retry] => Array
            (
            )

    )

[logger:Google_Client:private] => 
[deferExecution:Google_Client:private] => 
[requestedScopes:protected] => Array
    (
    )

1 个答案:

答案 0 :(得分:1)

我通过将客户端库更新到最新版本来解决这个问题。