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:

Надеюсь, это поможет!

Другие вопросы по тегам