2012-04-11 9 views
5

Google APIの使用方法に関するドキュメント、サンプル、チュートリアルを読んでいます。私はあなたの最新の活動や情報を示すミニアプリを既に実行していますが、セッションを使用してトークンを格納します。Google+ OAuth API初めてのログインと承認後にトークンを保存して検索します

私の質問は、データベースからトークンを保存して取得するにはどうすればいいですか?ユーザーが(既に登録している)「ログイン」をクリックすると、この例をミニアプリの出発点として使用したことに注意してください。ここで

は、コードスニペットです:

$client = new apiClient(); 
$client->setApplicationName(APP_NAME); 
$client->setClientId(CLIENT_ID); 
$client->setClientSecret(CLIENT_SECRET); 
$client->setRedirectUri(REDIRECT_URL); 
$client->setDeveloperKey(DEV_KEY); 

$plus = new apiPlusService($client); 
$google_userinfo = new apiOauth2Service($client); 

$message = ""; 

// In a real application this would be stored in a database, and not in the session! 
if (isset($_SESSION['token'])) 
    $client->setAccessToken($_SESSION['token']); 

$_SESSION['token'] = $client->getAccessToken(); 

if (isset($_GET['code'])) { 
    $client->authenticate(); 
    // In a real application this would be stored in a database, and not in the session! 
    $_SESSION['token'] = $client->getAccessToken(); 
    header('Location: http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']); 
} 
... 
//Somewhere here, I added a function that ties $_SESSION['token'] to the user's info. 
... 
<form action="" method="post" id="form1" name="form1"> 
    <fieldset> 
     <div id="main-url-section" style="width: 50%;margin: 0px auto;text-align: center;"> 
     <?php 
      $authUrl = $client->createAuthUrl(); 
      print "<p><a class='login' href='$authUrl'>Log me in!</a></p>"; 
     ?>         
     </div> 
    </fieldset> 
</form> 

は助けをどうもありがとうございます!

よろしく、

ジョン

答えて

9

Googleがトップであなたの構成ブロックでこのコードを追加し、すでにあなたのアプリケーションを許可した人々のための認可プロンプトをスキップしたい場合:

$client->setAccessType("online"); 
$client-> setApprovalPrompt("auto"); 

この解決策には1つのキャッチがあります.OAuthダンスを完了したときにリフレッシュトークンを受け取ることはありません。つまり、新しいトークンを取得するためにアクセストークンが期限切れになるたびに、ユーザーはGoogleの認証サービスにリダイレクトされます。これはおよそ1時間ごとに発生します。

背景情報

デフォルトではPHPクライアントライブラリはoffline accessを提供するように構成されています。これはsource codeで確認できます。このモードが有効な場合、OAuthフローは、必要に応じて新しいアクセストークンを要求するために使用できるrefresh tokenを生成します。あなたはこれが起こっていることに気付かないかもしれません。 PHPクライアントライブラリがこれの大部分を担当します。

このリフレッシュトークンはコストがかかりますが、あなたはそれを保管する責任があります。あなたがそれを失った場合、あなたは別のユーザーが発行するためにあなたのアプリケーションを再認証する必要があります。それを保存する方法は、実装の詳細に大きく依存します。セッションデータは、十分な耐久性を持たせることができれば、これを行うための合理的な方法です。

+0

この回答ありがとうございます!これは便利で、私は一時的な修正として使うことができます:)私はすでにそれをチェックアウトしました。しかし、あなたは$ client-> getAccessToken()に入っているトークンをどのように格納するかについてのポストへのリンクを知っていますか?ユーザーがログインしたときにそれらを使用しますか? – user1239714

+0

@ user1239714:ここではアドバイスのためのリンク先がわかりません。これは、アプリケーションの残りのデータを永続化する方法に完全に依存します。たとえば、典型的なLAMPアプリケーションを作成している場合は、リフレッシュトークンをMySqlに保存して後で呼び出すことができます。 – mimming

+1

@JennyMurphy「ソースコードでこれを見ることができます」。リンクが壊れています。別のサンプルを提供してください。 – knightrider

0

これは古い質問ですが、回答が完全ではなかったようです。

承認された回答は、ユーザーがGoogle認証サーバーを経由するように機能し、認証画面は表示されません。質問は、トークンを保存し、ユーザーをGoogleサーバーに送信せずに再び使用することでした。

あなたがしたいことがあれば(また、現在アプリを使用していなくてもユーザーデータにアクセスすることができます)、更新トークンを含むアクセストークンを要求するだけです。

これは、オフラインアクセスタイプを使用して行います(途中ではデフォルトではありません)。たとえば、php:$client->setAccessType("offline");です。

受信したアクセストークンには、ユーザーが最初に最初に承認したときにのみ更新トークンが含まれるため、保存する必要があります。

次に、期限が切れていても、そのアクセストークンをクライアントで使用するだけで、クライアントがそのアクセストークンをリフレッシュして新しいトークンを取得します。

希望する、 アモス

関連する問題