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



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

基本上,我完全按照快速入门页面(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));

授权后,我使用谷歌在我的重定向网址上提供的代码获得访问令牌:

$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,将看到史密斯电子邮件。

这是怎么回事?我想念什么?

更新:

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

我还尝试使用 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
(
)

(

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

最新更新