2017-04-08 3 views
0

Googleクライアントインスタンスを作成し、一度認証して必要なデータを取得しています。その後、他のサービスに同じGoogleクライアントのインスタンスを使用したい場合、どうすれば実現できますか?認証済みのGoogleクライアントインスタンスを複数のサービスに使用する

webmasterMainルートは、Googleのウェブマスターに登録されたリダイレクトURLです。

public function webmasterMain(Request $request) 
    { 
     $requestData = $request->all(); 
     if ($request->isMethod('POST') || isset($requestData['code'])) { 
      $google_redirect_url = env('APP_URL') . '/user/webmasterMain'; 
      $gClient = new \Google_Client(); 
      $gClient->setAccessType("offline");// to get refresh token after expiration of access token 
      $gClient->setIncludeGrantedScopes(true); // incremental auth 
      $gClient->setApplicationName(config('services.google.app_name')); 
      $gClient->setClientId(config('services.google.client_id')); 
      $gClient->setClientSecret(config('services.google.client_secret')); 
      $gClient->setRedirectUri($google_redirect_url); 
      $gClient->setDeveloperKey(config('services.google.api_key')); 
      $gClient->setScopes(array(
       'https://www.googleapis.com/auth/plus.me', 
       'https://www.googleapis.com/auth/userinfo.email', 
       'https://www.googleapis.com/auth/userinfo.profile', 
       'https://www.googleapis.com/auth/webmasters.readonly', 
       'https://www.googleapis.com/auth/webmasters', 
      )); 
      $google_oauthV2 = new \Google_Service_Oauth2($gClient); 
      if ($request->get('code')) { 
       $gClient->authenticate($request->get('code')); 
       $request->session()->put('token', $gClient->getAccessToken()); 
      } 
      if ($request->session()->get('token')) { 
       $gClient->setAccessToken($request->session()->get('token')); 
      } 

      if ($gClient->getAccessToken()) { 
       $inst = new Google_Service_Webmasters($gClient); 
       $res = $inst->sites->listSites(); 
       $sites = $res->getSiteEntry(); 
       $siteUrl = []; 
       foreach ($sites as $key => $site) { 
        $siteUrl = array_add($siteUrl, $key, ['site_name'=>$site['siteUrl'], 'site_permission_level' => $site['permissionLevel']]); 
       } 
       $sites = (((array)$siteUrl)); 
       return view('User::webmasterMain')->with(['data' => $sites]); 
      } else { 
       //For Guest user, get google login url 
       $authUrl = $gClient->createAuthUrl(); 
       return redirect()->to($authUrl); 
      } 
     } 
     return view('User::webmasterMain'); 
    } 

は、今私はGoogle_Service_Webmasters_SearchAnalyticsQueryRequestのようなサービスのために認証された$ gClientを取得したいとし、その後、どのように私はこの次の要求を$クライアント= $ gClientを作ることができますか?

public function query(Request $request){ 
//suppose $client is the same instance which was previously authenticated and stored in $gClient 
    $website = "http://example.com/"; 
       $searchAnalytics = new \Google_Service_Webmasters_SearchAnalyticsQueryRequest(); 
       $searchAnalytics->setStartDate('2017-03-01'); 
       $searchAnalytics->setEndDate('2017-03-31'); 
       $searchAnalytics->setDimensions(['page']); 
       $searchAnalytics->setSearchType('web'); 
    `$results = $client->searchanalytics->query($website, $searchAnalytics);` 
    return $results->getRows(); 

答えて

0

私は、インスタンスを保存するか、何もしますが、これに従うする必要答えを得ない:Googleのクライアントオブジェクトを作成します

  1. を。
  2. 最初に認証すると、getAccessToken()によってGoogleクライアントオブジェクトからaccessTokenを保存します。
  3. このGoogleトークンでは、同じアクセストークンを使用してアクセストークンを設定します。
  4. これで、任意のサービスに対してこのGoogleクライアントオブジェクトを使用できるようになりました。

初回認証:

$gClient = new \Google_Client(); 

     if ($request->session()->get('token')) { 
      $gClient->setAccessToken($request->session()->get('token')); 
     } 

     $client = new Google_Service_Webmasters($gClient); 

$gClient = new \Google_Client(); 

//今、私たちはすべてのGoogleサービスの呼び出しでは、このアクセストークンを使用することができます

$request->session()->put('token', $gClient->getAccessToken()); 

を認証した後

関連する問題