我在构建OAuth集成到我的网络应用程序中的逻辑时遇到了麻烦。在应用程序中,用户创建一个报告,其中包含来自其Google Analytics(分析)帐户的数据。
用户步骤:
我的问题在于构建下面的代码。
当用户点击“新报告”时,它们实际上会重定向到google_analytics#ga_session
以开始授权过程。检索用户的Web属性的代码成功,但底部的代码需要重构,以便在检索Web属性数据时可以重用。我无法弄清楚的两个主要问题是如何使GoogleAnalytics实例可重用以及如何构建oauth重定向。
检索网络媒体资源:
GoogleAnalyticsController
def ga_session
client = OAuth2::Client.new(ENV['GA_CLIENT_ID'], ENV['GA_SECRET_KEY'], {
:authorize_url => 'https://accounts.google.com/o/oauth2/auth',
:token_url => 'https://accounts.google.com/o/oauth2/token'
})
redirect_to client.auth_code.authorize_url({
:scope => 'https://www.googleapis.com/auth/analytics.readonly',
:redirect_uri => ENV['GA_OAUTH_REDIRECT_URL'],
:access_type => 'offline'
})
end
def oauth_callback
session[:oauth_code] = params[:code]
redirect_to new_report_path
end
ReportsController
def new
@report = Report.new
ga_obj = GoogleAnalytics.new
ga_obj.initialize_ga_session(session[:oauth_code])
@ga_web_properties = ga_obj.fetch_web_properties
end
GoogleAnalytics模型
def initialize_ga_session(oauth_code)
client = OAuth2::Client.new(ENV['GA_CLIENT_ID'], ENV['GA_SECRET_KEY'], {
:authorize_url => 'https://accounts.google.com/o/oauth2/auth',
:token_url => 'https://accounts.google.com/o/oauth2/token'
})
access_token_obj = client.auth_code.get_token(oauth_code, :redirect_uri => ENV['GA_OAUTH_REDIRECT_URL'])
self.user = Legato::User.new(access_token_obj)
end
def fetch_web_properties
self.user.web_properties
end
在创建报告时检索网络媒体资源
ReportsController
def create
@report = Report.new(params[:report])
@report.get_top_traffic_keywords(session[:oauth_code])
create!
end
报告模型
def get_keywords(oauth_code)
ga = GoogleAnalytics.new
ga.initialize_ga_session(oauth_code) # this is a problem b/c the user will be redirected the new_report_path after the callack
self.url = ga.fetch_url(self.web_property_id)
self.keywords = # Get keywords for self.url from another service
keyword_revenue_data(oauth_code)
end
def keyword_revenue_data(oauth_code)
ga = GoogleAnalytics.new
ga.initialize_ga_session(oauth_code)
revenue_data = # Get revenue data
end