7

「google-api-php-client」-Library (http://code.google.com/p/google-api-php-client/) で提供されている例を使用して、ユーザーのログインと承認を実装していますGoogle サービスを含むウェブサイト。クライアント ID などを追加する以外は、例に変更を加えていません。

認証自体は正常に機能します。ユーザーはログインでき、提供された情報を取得できます。ただし、ページを離れると、承認手順全体が再度呼び出されます。ユーザーは記憶されておらず、アクセス許可を再度付与する必要があります。

例: stackoverflow では、Google アカウントでログインしています。このサイトに再度アクセスすると、自動的にログインするか、(ログアウトした場合) 再度ログインする必要があります。一般的な権限を再度確認する必要はありません。ただし、私のサイトの例を使用すると、ユーザーはサイトに再度アクセスするたびにアクセスを許可する必要があります。

例を使用するときに何か間違いを犯しましたか? 許可要求を何度も回避するには、どうすればよいですか?

どんな種類の助けにも感謝します!

4

3 に答える 3

1

このコードを初めて使用して access_code を取得し、データベースに保存します。

<?php
    require 'google-api-php-client/src/Google_Client.php';
    require 'google-api-php-client/src/contrib/Google_DriveService.php';
    require 'google-api-php-client/src/contrib/Google_Oauth2Service.php';
    session_start();

    $client = new Google_Client();
    $client->setClientId(CLIENT_ID);
    $client->setClientSecret(CLIENT_SECRET);
    $client->setRedirectUri(REDIRECT_URI);
    $client->setScopes(array(
      'https://www.googleapis.com/auth/drive',
      'https://www.googleapis.com/auth/userinfo.email',
      'https://www.googleapis.com/auth/userinfo.profile'));

    $client->setUseObjects(true);
    $service = new Google_DriveService($client);
          $client->authenticate();
          $_SESSION['token'] = $client->getAccessToken();
          const ACCESS_TOKEN=$_SESSION['token'];
              //code here to save in database
   ?>

ACCESS_TOKEN がデータベースに保存されたら、コードを次のように変更します。

<?php
        require 'google-api-php-client/src/Google_Client.php';
        require 'google-api-php-client/src/contrib/Google_DriveService.php';
        require 'google-api-php-client/src/contrib/Google_Oauth2Service.php';
    session_start();

        $client = new Google_Client();
        $client->setClientId(CLIENT_ID);
        $client->setClientSecret(CLIENT_SECRET);
        $client->setRedirectUri(REDIRECT_URI);
        $client->setScopes(array(
          'https://www.googleapis.com/auth/drive',
          'https://www.googleapis.com/auth/userinfo.email',
          'https://www.googleapis.com/auth/userinfo.profile'));

        $client->setUseObjects(true);
        $service = new Google_DriveService($client);

    //ACCESS_TOKEN is already saved in database, is being saved on first time login.

        $_SESSION['access_token'] = ACCESS_TOKEN;

        if (isset($_SESSION['access_token'])) {
          $client->setAccessToken($_SESSION['access_token']);
        }

        if ($client->getAccessToken()) 
        {
           $userinfo = $service->about->get();
           echo '<script>console.log('.json_encode($userinfo).');</script>';

           $userinfoService = new Google_OAuth2Service($client);
           $user = $userinfoService->userinfo->get();
           echo '<script>console.log('.json_encode($user).');</script>';
        } 
    ?>
于 2013-06-14T08:03:48.607 に答える
0

Google ドライブ SDK のドキュメントには、開始するためのリファレンスとして使用できる完全な PHP サンプル アプリケーションが含まれています。

https://developers.google.com/drive/examples/php

基本的に、ユーザーがログインしてアクセス トークンとリフレッシュ トークンを取得したら、それらの資格情報をデータベースに保存し、毎回ユーザーに認証を求める代わりにそれらを再利用します。

于 2012-08-10T16:32:29.487 に答える