Я думаю, что проблема Вы сталкиваетесь в том, что garb
только аутентификации пользователя с использованием OAuth 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
Initializer (для Google Analytics доступа):
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
Затем построить для 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
Спасибо за отличный ответ, это спасло тонну моего времени. Если у кого-то есть проблемы с конфигурацией, у меня есть пример приложения, которое частично основано на этом ответе: https://github.com/eicca/ga_test –
Это все еще работает? Я использую Signet для получения токена доступа OAuth2 для учетной записи службы (так как мне нужен сервер для сервера), а затем создал новый объект Garb :: Session и назначил ему токен доступа так же, как и ответ. Я получаю сообщение об ошибке для 'Garb :: Management :: Profile.all (garbsession)' –