2016-07-08 13 views
3

Googleにログインしたアカウントのアナリティクスデータを含む簡単なダッシュボードを使用してWebアプリケーションを作成しようとしています。私はLaravelとSocialiteパッケージを使用しています。現在、Googleでユーザーをログインできます。私は、開発者のクライアント鍵とクライアント秘密を持っています。アナリティクスの読み取り専用、オフラインアクセスのスコープを設定し、顧客名、メールアドレス、Google ID、アクセストークン、更新トークンをデータベースに保存します。私は問題なくユーザーをログインできます。laravel - GoogleアナリティクスAPI認証

私がやりたいことは、今のところ、Analyticsアカウントに現在あるプロファイルにアクセスすることです。私はAnalytics APIドキュメントの例に従っていましたが、うまく機能しませんでした。アクセストークンとリフレッシュトークンを保存しているので、現在のユーザーを認証してAnalyticsデータを取得できるはずですが、クライアントとアナリティクスのライブラリからは簡単なメソッドを見つけることができませんでした。アナリティクスのデータにオフラインでアクセスする必要があるため、アクセストークンと更新トークンを使用してリクエストを許可する必要があると思われますが、アナリティクス固有のデータはユーザーのログインプロセスから取得されません。私は今、完全に失われています、私はAnayltics APIへの私の要求をどのように承認するのですか?私はAdWords APIを8ヶ月以上使用していますが、AdWords APIドキュメントではすべてのことがはっきりしていますが、Analytics APIを使用することはできません。

これらは私のユーザーのログイン方法です:

public function redirectToProvider() 
{ 
    $parameters = ['access_type' => 'offline']; 
    return Socialite::driver('google') 
     ->scopes(['https://www.googleapis.com/auth/analytics.readonly']) 
     ->with($parameters) 
     ->redirect(); 
} 

/** 
* Obtain the user information from Google. 
* 
* @return Response 
*/ 
public function handleProviderCallback() 
{ 
    $outsiderLogin = Socialite::driver('google')->stateless()->user(); 


    $user = User::where('googleID', $outsiderLogin->id)->first(); 

    // Register the user if there is no user with that id. 
    if (!$user) { 
     $user = new User; 
     $user->name   = $outsiderLogin->name; 
     $user->googleID  = $outsiderLogin->id; 
     $user->email  = $outsiderLogin->email; 
     $user->token  = $outsiderLogin->token; 
     $user->refreshToken = $outsiderLogin->refreshToken; 
     $user->save(); 
    } 
    // Log the user in. 
    Auth::login($user); 

    return redirect('/home'); 
} 

はどうもありがとうございました。

答えて

4

私は今のところ解決策を発見しました。最初に、私はGoogleからの認証URLで返されるコードが必要であると思っていました.Socialiteパッケージを調べると、保護されたメソッドgetCode()\vendor\laravel\socialite\src\Two\AbstractProvider.phpにあり、URLからコードが返されています。パッケージのソースファイルを編集し、メソッドタイプをprotectedからpublicに変更しました。これにより、クラス外でそのメソッドを使用できるようになりました。これにより、URLからコードにアクセスし、さらにDBに格納できました認証要件しかし、このセットアップには問題がありました。まず、アップデートなしでそのパッケージを保持する方法を見つける必要があります。これは、すべてのアップデートがソースファイルに加えた変更をロールバックするためです。私が直面した第二の問題は、私がトークンを保管する方法でした。デフォルトでは、GoogleクライアントAPIは、フィールドaccess_token,refresh_token,expires_in,idcreatedを含む配列を返します。これらのフィールドでは、アナリティクスサーバーへのリクエストを認証します。私のシナリオでは、基本的なSocialiteログインプロセスから戻る標準配列はありませんでした。 access_token,refresh_tokenexpiresという変数があり、それらをすべてデータベースに保存しました。これはGoogleライブラリの問題を引き起こしました。構造化された配列を要求しましたが、変数expires_increatedもありませんでした。これはGoogleがすべてのリクエストでトークンを更新するよう偽の配列を設定しているためですいずれかを練習する。

最終的には、どのパッケージをオンラインで使用するのか理解できず、自分で簡単な認証を書いてしまいました。脆弱性があるかどうかわかりませんが、私にとってはうまくいきます。それが必要です。ここで

は私のルート線である:

Route::get('auth/google', [ 
      'as' => 'googleLogin', 
      'uses' => 'Auth\[email protected]' 
]); 
Route::get('auth/google/callback', [ 
      'as' => 'googleLoginCallback', 
      'uses' => 'Auth\[email protected]' 
]); 

そして、これらはAuthControllerメソッドです:

/** 
* Redirect the user to the Google authentication 
*/ 
public function redirectToProvider() 
{ 
    // Create the client object and set the authorization configuration from JSON file. 
    $client = new Google_Client(); 
    $client->setAuthConfig('/home/vagrant/Analytics/client_secret.json'); 
    $client->setRedirectUri('http://' . $_SERVER['HTTP_HOST'] . '/auth/google/callback'); 
    $client->addScope(Google_Service_Analytics::ANALYTICS_READONLY); 
    $client->addScope("email"); 
    $client->addScope("profile"); 
    $client->setAccessType("offline"); 

    $auth_url = $client->createAuthUrl(); 
    return redirect($auth_url); 

} 

/** 
* Obtain the user information from Google. 
* 
* @return redirect to the app. 
*/ 
public function handleProviderCallback() 
{ 
    // Handle authorization flow from the server. 
    if (! isset($_GET['code'])) { 
     return redirect('auth/google'); 
    } else { 

     // Authenticate the client, and get required informations. 
     $client = new Google_Client(); 
     $client->setAuthConfig('/home/vagrant/Analytics/client_secret.json'); 
     $client->authenticate($_GET['code']); 

     // Store the tokens in the session. 
     Session::put('token', $client->getAccessToken()); 

     $service = new Google_Service_Oauth2($client); 
     $userInfo = $service->userinfo->get(); 

     $user = User::where('googleID', $userInfo->id)->first(); 

     // If no match, register the user. 
     if(!$user) { 
      $user = new User; 
      $user->name = $userInfo->name; 
      $user->googleID = $userInfo->id; 
      $user->email = $userInfo->email; 
      $user->refreshToken = $client->getRefreshToken(); 
      $user->code = $_GET['code']; 
      $user->save(); 
     } 

     Auth::login($user); 
     return redirect('/home'); 
    } 

} 

私は私が指定したフォルダの中にGoogleのAPIコンソールからダウンロードしたclient_secret.jsonファイルを置いてきた、このあなたのために異なるかもしれません。また、必要なセグメントに一致させるために、移行ファイルを変更しました。これらの手順の後、私は基本的なLaravel authで登録された単純なユーザーであるため、そのユーザーを扱うことができます。

は今、私は照会することができる、と言う、ユーザーのGoogle Analyticsのアカウントは次のようにアカウント: ​​

は、スタックオーバーフローが私を助けている何千回もありました、私はこれは作業の事を得るために誰かに役立ちます願っています。

2

本当にあなたは、Laravelに同梱されているSocialiteパッケージ(ログイン用に多く使用されている、それについて)を探しています。

http://packalyst.com/s/google%20analytics

具体的には、このパッケージ:https://github.com/spatie/laravel-analytics

あなたはしかしここであなたを助けるべき(他の多くのLaravelの束と一緒に)多くのGoogleの分析パッケージを見つけることができますが、APIの呼び出しを行います

それ、またはあなた自身のGuzzleとcURLスクリプトを実行してください。私は完全な吹き飛ばされたAPIを構築することなく何かを素早く必要とするときにGuzzleを使用します。

ただし、GAデータにアクセスするためのSocialiteの使用についての興味深い記事があります。しかし、あなたはかなり限られています。ユーザー主導のダッシュボードを作成する場合は、別のパッケージを選択します。

https://laracasts.com/discuss/channels/tips/how-i-made-google-analytics-work-with-socialite

+0

まずは、ありがとうございます。私はこれらのパッケージのほとんどを見てきましたが、それらのパッケージにはga-123456のようなGoogleアナリティクスのビューIDが必要なようですが、これは良いユーザーエクスペリエンスではないと思います。ユーザーとして、私は、成功した認証の後、私の追加の努力なしに、そのWebページにすべてのデータを取得させたいと思います。これは物事が複雑になり、GAからデータを取得する必要がありますが、ビューIDがないか、認可プロセスに何も付属していません。これが私が立ち往生した場所です。私はアクセストークンを持っていますが、それらのパッケージのどれもそのアクセストークンで動作しませんか? –

+0

あなたの答えではありません。したがって、さまざまなオプションを検討する必要があります。このパッケージはすべてのGoogle APIサービスに使用します。しかし、Packalystを検索して、あなたが最も快適なものを見つけてください。 https://github.com/pulkitjalan/google-apiclient –

+1

ありがとうございます。私はソーシャルサイトで自分のやり方を見つけました。プロジェクトの締め切り日があるので、MVPまでこれを使用すると思います。私はあなたが使用するパッケージに移行すると思う、それは非常に使いやすいようです。ありがとう、あなたはそれを理解するのを手伝った。 –

0

同じことをやろうとしています。私は、oAuth 2.0とSocialiteパッケージを使用しているところで、ユーザー認証を行っています。 GAからフェッチするサイトのリストが必要です。そして、そこに完全に詰まっています。もしあなたが私がどのようにさらに進んでいくべきかについて私を導くことができれば本当に素晴らしいでしょう。

+0

Socialiteは、この種の認証やAPIの通信プロセスの答えではありません。 Socialiteパッケージのソースコードを更新する必要があります。これは意味がありません。更新ごとに変更をやり直す必要があるからです。ソーシャルサイトは単純なログイン作業のためのもので、ユーザーの情報が必要です。ここで私の答えをチェックしましたか?私はアカウントを取得するためのコードを提供しています。サイトを取得する直接的な方法があるかどうかはわかりませんが、GAアカウント、次に各プロパティのURLが付いているプロパティを取得できます。 –

+0

Githubでコードをプッシュできますか? – NewBee

+0

どのコードですか?すべてのコードはここにあり、コードの他の部分はビジネス関連の部分です。あなたはログインして、ポスト内のそれらのメソッドでアカウントレポートを得ることができます。私はあなたが望むなら、私は時間を持っているときにおそらく要点または何かを作成することができます。 –

関連する問題