0

Google からも PHP からもエラーがまったく返されないという大きな問題があります。

私は、Google クライアントの oauth2 接続モデルを作成しました。これは、Mac の開発環境で実行しているときに完全に機能します (単純なローカルホストを使用していません。実際には、プロダクションをミラーリングするために使用しているものは vagrant です)。サーバーに可能な限り)、本番環境にプッシュすると機能しません。

エラーを返さないだけです。コードは、Google からの認証コードがある部分に到達し、それをトークン ( $client->authenticate($auth_code) ) と交換しようとしている部分でハングします。

開発サイト (ちなみに公開リンクがあり、別のパブリック IP アドレスからアクセスしようとしました) ですべてがエラーなしで完全に機能しているため、何が間違っているのか本当にわかりません。

コードをライブサーバーにプッシュした瞬間、認証が停止します。すべての運用サーバーに正しい oauth 資格情報が設定されています。リダイレクト URI は正しいです。私は単に何が間違っているのか分かりません...

コードの一部を次に示します (繰り返しますが、公開されている 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);

どんな助けでも大歓迎です!

4

1 に答える 1

0

知る限り、別のトークンをリクエストする前に、既存のトークンを取り消す必要があります。

オフライン アクセスで述べたように、API クライアントのアクセス タイプを に設定するofflineと、クライアント オブジェクトは必要に応じてアクセス トークンを更新します。

そこで、アプリケーションに付与されたアクセス権を取り消す必要があります。述べたように、

削除プロセスの一部には、アプリケーションに付与されたアクセス許可を確実に削除するための API 要求を含めることができます。

次のように呼び出して、トークンを取り消してみることをお勧めしrevokeToken()ます。

$client->revokeToken();

次の SO 投稿で特定のソリューションを確認することもできます。

それが役立つことを願っています!

于 2016-12-17T12:16:11.323 に答える