Google Drive API oauth2 висит на работающем сервере и не возвращает ошибку при аутентификации с использованием auth_code
У меня есть огромная проблема, где абсолютно ни одна ошибка не возвращается ни от Google, ни от php.
Я написал клиент Google для модели подключения oauth2, которая отлично работает, когда я запускаю ее в своей среде разработки на своем Mac (я не использую простой localhost, это фактически бродит, что я использую для зеркалирования производства сервер как можно больше) но он не работает, когда я запускаю его в производство.
Он просто не возвращает никакой ошибки. Код достигает той части, где у меня есть код авторизации от Google, и он зависает в той части, где я пытаюсь обменять его на токен ( $client->authenticate($auth_code)).
Я действительно не знаю, что я делаю не так, так как все отлично работает без ошибок на сайте разработчика (кстати, с общедоступной ссылкой, и я попытался получить к ней доступ с разных публичных IP-адресов).
В тот момент, когда я отправляю код на работающий сервер, он просто перестает аутентифицироваться. У меня есть правильные учетные данные oauth, настроенные для каждого производственного сервера, URI перенаправления корректен. Я просто не знаю, что я делаю не так...
Вот часть кода (повторюсь, он отлично работает на сервере dev с общедоступным URL):
$this->client = new Google_Client();
$this->credentials_path . '/client_secret.json'
$this->client->setAuthConfigFile($this->credentials_path . '/client_secret.json');
$this->client->setAccessType('offline');
$this->client->setRedirectUri($this->redirect_uri);
$this->client->addScope(Google_Service_Drive::DRIVE_READONLY);
$this->client->authenticate($auth_code); //this is the part where the code hangs on a live server, but works perfectly on dev
$this->token = json_encode($this->client->getAccessToken());
$this->client->setAccessToken($this->token);
$this->writeTokenToFile($this->token);
if ($this->client->isAccessTokenExpired()) {
$this->client->refreshToken($this->token);
}
$google_drive_service = new Google_Service_Drive($this->client);
Любая помощь будет очень высоко ценится!
1 ответ
AFAIK, вам нужно отменить существующий токен, прежде чем запрашивать другой.
Как упомянуто в автономном доступе, когда вы устанавливаете тип доступа клиента API в offline
клиентский объект будет обновлять токен доступа по мере необходимости.
При этом вам необходимо отменить доступ, предоставленный приложению. Как уже упоминалось,
часть процесса удаления может включать в себя запрос API, чтобы гарантировать удаление разрешений, предоставленных приложению.
Вы можете попробовать отозвать токен, позвонив revokeToken()
:
$client->revokeToken();
Вы можете также проверить данные решения в следующих сообщениях SO:
- Автоматически обновлять токен с помощью API Google Drive с помощью PHP-скрипта.
- Не получен токен обновления Google OAuth
Надеюсь, это поможет!