4

GoogleAnalyticsに接続する必要があります。omniauth_google_oauth2アプリでユーザーを認証するために使用していますが、これでトークンが得られます。問題は、このユーザーのGoogleAnalyticsアカウントに接続する必要があることです。GAをアプリに接続するために、認証に2つの方法しかないgarbgemを使用しています。ユーザー名/パスワード、およびOAuthトークン。omn​​iauth_google_oauth2によって提供されたトークンを使用すると、機能しません。

omn​​iauth_google_oauth2での認証から取得したoauth_tokenのみを使用して、この新しいトークンを作成するにはどうすればよいですか?

4

2 に答える 2

2

私はこれでパーティーに遅れていることを知っていますが、同様の問題を解決しました。oauth2 をサポートするガーブのフォークを使用しない限り、ガーブで omniauth_google_oauth2 を使用することはできません。ここには、シジャによってよく維持されているものがあります。ただし、このフォークでセッションを作成するには、oauth2 クライアント オブジェクトを使用する必要があります。omn​​iauth_google_oauth2 を使用してユーザーのプロファイルを設定し、ユーザーの更新トークンを保存してください。その後、garb で分析データを取得する場合は、oauth2 でトークンを更新し、そのオブジェクトを garb セッションに渡して、ユーザーのデータ。omn​​iauth からの refresh_token をどこかに保存した後の例を次に示します。

client = OAuth2::Client.new YOURGOOGLEAPIKEY, YOURGOOGLEAPISECRET,
                                {
                                  :site => 'https://accounts.google.com',
                                  :authorize_url => "/o/oauth2/auth",
                                  :token_url => "/o/oauth2/token",
                                }
response = OAuth2::AccessToken.from_hash(client, :refresh_token => omniauth_refresh_token).refresh!
Garb::Session.access_token = response
于 2013-02-15T19:11:49.720 に答える
1

あなたが遭遇している問題は、garbOAuth 1 (またはユーザー名とパスワードの組み合わせ) を使用してのみユーザーを認証し、omniauth_google_oauth2(明らかに) OAuth 2.

私が見つけた唯一の解決策は、Google の非推奨の OAuth 1 実装を次のように使用することです...

Gemfile:

gem 'omniauth-google', :git => 'git://github.com/davidkpham/omniauth-google.git'
# This fork relaxes dependencies on omniauth itself

初期化子 (Google アナリティクス アクセス用):

provider :google, 'XXXXXXXXXXXX.apps.googleusercontent.com', 'YOUR_SECRET', scope: 'https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile https://www.google.com/analytics/feeds/'

コールバックで、返されたもののいくつかを保存します。

auth = request.env["omniauth.auth"]
session[:google_token] = auth.credentials.token
session[:google_secret] = auth.credentials.secret

次に、次の AccessToken を作成しgarbます。

if session[:google_token] and session[:google_secret]
  consumer = OAuth::Consumer.new('XXXXXXXXXXXX.apps.googleusercontent.com', 'YOUR_SECRET', {
    :site => 'https://www.google.com',
    :request_token_path => '/accounts/OAuthGetRequestToken',
    :access_token_path => '/accounts/OAuthGetAccessToken',
    :authorize_path => '/accounts/OAuthAuthorizeToken'
  })
  garbsession = Garb::Session.new
  garbsession.access_token = OAuth::AccessToken.new(consumer, session[:google_token], session[:google_secret])
  # Once we have an OAuth::AccessToken constructed, do fun stuff with it
  ga_id = "UA-XXXXXXX-X"
  profile = Garb::Management::Profile.all(garbsession).detect {|p| p.web_property_id == ga_id}
  ga_monthly = GoogleAnalyticsDate.results(profile, :start_date => (Date.today - 30), :end_date => Date.today, :sort => :date)
  puts ga_monthly
end
于 2012-07-31T19:11:45.193 に答える