我正在開發一個PHP,它使用Gmail API從Gmail中讀取電子郵件。Gmail PHP API獲取錯誤的帳戶電子郵件
基本上我正在按照快速入門頁面做的(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,從我的應用程序存儲在數據庫中的憑據。 如果憑據AR不存在我做的重定向的文檔賽斯:
$client->setAccessType('offline');
$client->setApprovalPrompt('force');
$auth_url = $client->createAuthUrl();
header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL));
授權我得到使用由谷歌在我的重定向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授權帳戶[email protected],則對用戶2授權郵件[email protected],在這兩種情況下,我都會看到相同的電子郵件(來自smith @ gmail。 COM)。
我檢查過,如果問題是我的,所以如果加載的訪問令牌是相同的,但不幸的是,這種訪問令牌是不同的。
另一個瘋狂的事情是,如果我刷新第二個帳戶([email protected])的令牌,我會看到正確的電子郵件,但現在seth會看到史密斯電子郵件。
這是怎麼回事?我想念什麼?
UPDATE:
我試過每一步,問題是訪問令牌,我已經試過了也是在另一臺服務器,但都返回相同的電子郵件。
我也試圖與[email protected]和手動我檢索到的訪問令牌來獲取授權碼:
$token = $client->fetchAccessTokenWithAuthCode($code);
,但沒辦法,也這樣做,它會不斷驗證我作爲其他電子郵件。
UPDATE:
事情越來越陌生,我試圖刪除配置文件的所有部分,我用它只有當我需要檢索授權碼。
所以在請求中,我只傳遞訪問令牌數組,所發生的是我可以看到電子郵件也完全移除訪問令牌,所以基本上客戶端在請求時看起來是空的。
(
[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
(
)
)
您是否嘗試過使用不同訪問令牌的google oauth遊樂場,以查看它是否會得到相同的結果? – Talus
謝謝你的回答,是的,我現在已經試過了,他們工作正常,女性都顯示正確的電子郵件列表。 但是,如果在PHP腳本中它們都返回相同的電子郵件列表,所以問題出現在腳本中,但與快速入門中的問題相同,您能否看一下? (https://pastebin.com/SyqGrVQq) – Dtnand
我忘了的另一個細節,在我發佈的腳本中,如果我檢查郵件列表是來自「[email protected]」的郵件列表,如果我刪除訪問類型,範圍和審批提示行,它會顯示「[email protected]」電子郵件。 – Dtnand