2016-12-16 8 views
0

У меня есть огромная проблема, при которой абсолютно не возвращается ошибка от google и php.API-интерфейс Google Диска oauth2 зависает на реальном сервере и не возвращает ошибки при аутентификации с помощью auth_code

Я написал модель подключения google client oauth2, которая отлично работает, когда я запускаю ее в своей среде dev на моем mac (я не использую простой локальный хост, на самом деле это бродяга, что я использую чтобы максимально отражать производственный сервер), но он не работает, когда я подталкиваю его к производству.

Это просто не возвращает никаких ошибок. Код достигает той части, где у меня есть код auth от Google, и он зависает в той части, где я пытаюсь ее обменять на токен ($ client-> authenticate ($ auth_code)).

Я действительно не знаю, что я делаю неправильно, так как все работает отлично без ошибок на сайте dev (кстати, у него есть общедоступная ссылка, и я пытался получить доступ к нему с разных общедоступных 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); 

Любая помощь будет очень ценим!

ответ

0

AFAIK, вам необходимо отменить существующий токен перед запросом другого.

Как указано в Offline access, при настройке типа доступа клиента API к offline клиентский объект будет обновлять токен доступа по мере необходимости.

При этом вам необходимо аннулировать доступ к приложению. Как уже упоминалось,

часть процесса удаления может включать в себя запрос API для обеспечения того, чтобы разрешения, предоставленные приложению, были удалены.

Вы можете попробовать revoking a token по телефону revokeToken():

$client->revokeToken(); 

Вы можете также проверить данные решения в следующих SO сообщений:

Надежда, что помогает!